rubocop 0.76.0 → 0.83.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/LICENSE.txt +1 -1
- data/README.md +6 -6
- data/config/default.yml +466 -306
- data/lib/rubocop/ast/builder.rb +45 -42
- data/lib/rubocop/ast/node/array_node.rb +13 -0
- data/lib/rubocop/ast/node/block_node.rb +7 -1
- data/lib/rubocop/ast/node/case_match_node.rb +56 -0
- data/lib/rubocop/ast/node/def_node.rb +11 -0
- data/lib/rubocop/ast/node/forward_args_node.rb +18 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +8 -0
- data/lib/rubocop/ast/node/regexp_node.rb +2 -4
- data/lib/rubocop/ast/node/send_node.rb +4 -0
- data/lib/rubocop/ast/node.rb +13 -20
- data/lib/rubocop/ast/traversal.rb +29 -10
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +105 -0
- data/lib/rubocop/cli/command/base.rb +33 -0
- data/lib/rubocop/cli/command/execute_runner.rb +76 -0
- data/lib/rubocop/cli/command/init_dotfile.rb +45 -0
- data/lib/rubocop/cli/command/show_cops.rb +80 -0
- data/lib/rubocop/cli/command/version.rb +17 -0
- data/lib/rubocop/cli/command.rb +21 -0
- data/lib/rubocop/cli/environment.rb +21 -0
- data/lib/rubocop/cli.rb +20 -233
- data/lib/rubocop/comment_config.rb +6 -1
- data/lib/rubocop/config.rb +41 -11
- data/lib/rubocop/config_loader.rb +54 -44
- data/lib/rubocop/config_loader_resolver.rb +28 -1
- data/lib/rubocop/config_obsoletion.rb +67 -11
- data/lib/rubocop/config_validator.rb +74 -99
- data/lib/rubocop/cop/autocorrect_logic.rb +7 -4
- data/lib/rubocop/cop/badge.rb +5 -5
- data/lib/rubocop/cop/bundler/gem_comment.rb +4 -4
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +3 -3
- data/lib/rubocop/cop/cop.rb +21 -0
- data/lib/rubocop/cop/corrector.rb +48 -24
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/condition_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -2
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
- data/lib/rubocop/cop/generator.rb +6 -6
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +59 -0
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -1
- data/lib/rubocop/cop/internal_affairs.rb +1 -0
- data/lib/rubocop/cop/layout/{align_arguments.rb → argument_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/array_alignment.rb +82 -0
- data/lib/rubocop/cop/layout/{indent_assignment.rb → assignment_indentation.rb} +1 -1
- data/lib/rubocop/cop/layout/block_end_newline.rb +5 -3
- data/lib/rubocop/cop/layout/condition_position.rb +12 -2
- data/lib/rubocop/cop/layout/dot_position.rb +1 -1
- data/lib/rubocop/cop/layout/else_alignment.rb +8 -0
- data/lib/rubocop/cop/layout/empty_line_between_defs.rb +2 -1
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +68 -0
- data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +1 -1
- data/lib/rubocop/cop/layout/{indent_first_argument.rb → first_argument_indentation.rb} +5 -5
- data/lib/rubocop/cop/layout/{indent_first_array_element.rb → first_array_element_indentation.rb} +20 -14
- data/lib/rubocop/cop/layout/{indent_first_hash_element.rb → first_hash_element_indentation.rb} +4 -4
- data/lib/rubocop/cop/layout/{indent_first_parameter.rb → first_parameter_indentation.rb} +3 -3
- data/lib/rubocop/cop/layout/{align_hash.rb → hash_alignment.rb} +10 -6
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +2 -2
- data/lib/rubocop/cop/layout/{indent_heredoc.rb → heredoc_indentation.rb} +7 -7
- data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
- data/lib/rubocop/cop/layout/leading_comment_space.rb +34 -3
- data/lib/rubocop/cop/layout/{leading_blank_lines.rb → leading_empty_lines.rb} +1 -1
- data/lib/rubocop/cop/{metrics → layout}/line_length.rb +72 -110
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +15 -6
- data/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb +0 -4
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_call_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
- data/lib/rubocop/cop/layout/{align_parameters.rb → parameter_alignment.rb} +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
- data/lib/rubocop/cop/layout/space_around_keyword.rb +12 -0
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +133 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +69 -9
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +17 -0
- data/lib/rubocop/cop/layout/space_before_first_arg.rb +8 -0
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -9
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
- data/lib/rubocop/cop/layout/{trailing_blank_lines.rb → trailing_empty_lines.rb} +1 -1
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +38 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +12 -0
- data/lib/rubocop/cop/lint/debugger.rb +2 -2
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +1 -1
- data/lib/rubocop/cop/lint/{duplicated_key.rb → duplicate_hash_key.rb} +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/empty_when.rb +29 -6
- data/lib/rubocop/cop/lint/ensure_return.rb +18 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -1
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +1 -1
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +1 -1
- data/lib/rubocop/cop/lint/inherit_exception.rb +1 -1
- data/lib/rubocop/cop/lint/interpolation_check.rb +1 -1
- data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +1 -1
- data/lib/rubocop/cop/lint/loop.rb +6 -4
- data/lib/rubocop/cop/lint/{multiple_compare.rb → multiple_comparison.rb} +2 -2
- data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +89 -0
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +21 -9
- data/lib/rubocop/cop/lint/percent_string_array.rb +2 -2
- data/lib/rubocop/cop/lint/raise_exception.rb +75 -0
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +4 -9
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +13 -8
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +1 -1
- data/lib/rubocop/cop/lint/{string_conversion_in_interpolation.rb → redundant_string_coercion.rb} +2 -2
- data/lib/rubocop/cop/lint/redundant_with_index.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_with_object.rb +2 -2
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +1 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
- data/lib/rubocop/cop/lint/{handle_exceptions.rb → suppressed_exception.rb} +13 -29
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
- data/lib/rubocop/cop/lint/unused_method_argument.rb +32 -6
- data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +69 -23
- data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +5 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +5 -1
- data/lib/rubocop/cop/metrics/method_length.rb +1 -1
- data/lib/rubocop/cop/migration/department_name.rb +47 -6
- data/lib/rubocop/cop/mixin/alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +4 -0
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +6 -1
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +14 -5
- data/lib/rubocop/cop/mixin/{hash_alignment.rb → hash_alignment_styles.rb} +1 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +178 -0
- data/lib/rubocop/cop/mixin/line_length_help.rb +89 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +5 -0
- data/lib/rubocop/cop/mixin/nil_methods.rb +4 -4
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
- data/lib/rubocop/cop/mixin/rational_literal.rb +18 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +9 -24
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +9 -13
- data/lib/rubocop/cop/naming/{uncommunicative_block_param_name.rb → block_parameter_name.rb} +3 -3
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +2 -1
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +6 -6
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +26 -0
- data/lib/rubocop/cop/naming/{uncommunicative_method_param_name.rb → method_parameter_name.rb} +4 -4
- data/lib/rubocop/cop/naming/predicate_name.rb +6 -6
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
- data/lib/rubocop/cop/offense.rb +11 -0
- data/lib/rubocop/cop/registry.rb +15 -3
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -6
- data/lib/rubocop/cop/style/alias.rb +5 -5
- data/lib/rubocop/cop/style/and_or.rb +5 -6
- data/lib/rubocop/cop/style/array_join.rb +2 -2
- data/lib/rubocop/cop/style/attr.rb +8 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +60 -1
- data/lib/rubocop/cop/style/case_equality.rb +24 -1
- data/lib/rubocop/cop/style/character_literal.rb +2 -2
- data/lib/rubocop/cop/style/collection_methods.rb +2 -0
- data/lib/rubocop/cop/style/conditional_assignment.rb +10 -10
- data/lib/rubocop/cop/style/copyright.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +1 -1
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +49 -0
- data/lib/rubocop/cop/style/documentation.rb +43 -5
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +1 -1
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +3 -3
- data/lib/rubocop/cop/style/empty_method.rb +1 -5
- data/lib/rubocop/cop/style/end_block.rb +6 -0
- data/lib/rubocop/cop/style/eval_with_location.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +2 -2
- data/lib/rubocop/cop/style/expand_path_arguments.rb +3 -3
- data/lib/rubocop/cop/style/exponential_notation.rb +119 -0
- data/lib/rubocop/cop/style/format_string.rb +2 -2
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +89 -11
- data/lib/rubocop/cop/style/guard_clause.rb +28 -4
- data/lib/rubocop/cop/style/hash_each_methods.rb +89 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +3 -5
- data/lib/rubocop/cop/style/hash_transform_keys.rb +83 -0
- data/lib/rubocop/cop/style/hash_transform_values.rb +80 -0
- data/lib/rubocop/cop/style/if_unless_modifier.rb +61 -6
- data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +9 -5
- data/lib/rubocop/cop/style/ip_addresses.rb +4 -4
- data/lib/rubocop/cop/style/lambda.rb +3 -2
- data/lib/rubocop/cop/style/lambda_call.rb +1 -21
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +169 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +54 -0
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +7 -205
- data/lib/rubocop/cop/style/mixin_grouping.rb +2 -2
- data/lib/rubocop/cop/style/module_function.rb +58 -12
- data/lib/rubocop/cop/style/multiline_if_modifier.rb +1 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +21 -2
- data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
- data/lib/rubocop/cop/style/nested_parenthesized_calls.rb +9 -9
- data/lib/rubocop/cop/style/next.rb +7 -7
- data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +4 -4
- data/lib/rubocop/cop/style/not.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literals.rb +8 -4
- data/lib/rubocop/cop/style/numeric_predicate.rb +5 -4
- data/lib/rubocop/cop/style/one_line_conditional.rb +4 -3
- data/lib/rubocop/cop/style/option_hash.rb +3 -3
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/or_assignment.rb +4 -3
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +7 -7
- data/lib/rubocop/cop/style/percent_q_literals.rb +1 -1
- data/lib/rubocop/cop/style/perl_backrefs.rb +2 -2
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +3 -3
- data/lib/rubocop/cop/style/redundant_condition.rb +18 -6
- data/lib/rubocop/cop/style/redundant_conditional.rb +1 -1
- data/lib/rubocop/cop/style/redundant_exception.rb +3 -3
- data/lib/rubocop/cop/style/redundant_interpolation.rb +2 -2
- data/lib/rubocop/cop/style/redundant_parentheses.rb +3 -3
- data/lib/rubocop/cop/style/redundant_percent_q.rb +2 -2
- data/lib/rubocop/cop/style/redundant_return.rb +7 -15
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/redundant_sort.rb +3 -3
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +1 -1
- data/lib/rubocop/cop/style/self_assignment.rb +1 -1
- data/lib/rubocop/cop/style/slicing_with_range.rb +39 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/stabby_lambda_parentheses.rb +1 -4
- data/lib/rubocop/cop/style/string_hash_keys.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +3 -3
- data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
- data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -3
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +35 -22
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +41 -0
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +88 -0
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +44 -0
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +7 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +6 -6
- data/lib/rubocop/cop/style/unpack_first.rb +0 -4
- data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
- data/lib/rubocop/cop/style/while_until_modifier.rb +2 -2
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +16 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
- data/lib/rubocop/cop/team.rb +5 -0
- data/lib/rubocop/cop/util.rb +24 -0
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
- data/lib/rubocop/cop/variable_force/scope.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +1 -0
- data/lib/rubocop/cop/variable_force.rb +4 -1
- data/lib/rubocop/formatter/base_formatter.rb +2 -2
- data/lib/rubocop/formatter/clang_style_formatter.rb +0 -2
- data/lib/rubocop/formatter/formatter_set.rb +1 -1
- data/lib/rubocop/formatter/json_formatter.rb +6 -5
- data/lib/rubocop/formatter/junit_formatter.rb +74 -0
- data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
- data/lib/rubocop/formatter/tap_formatter.rb +0 -2
- data/lib/rubocop/name_similarity.rb +12 -9
- data/lib/rubocop/node_pattern.rb +97 -11
- data/lib/rubocop/options.rb +26 -13
- data/lib/rubocop/processed_source.rb +1 -4
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/result_cache.rb +23 -7
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/rspec/expect_offense.rb +1 -1
- data/lib/rubocop/rspec/shared_contexts.rb +5 -4
- data/lib/rubocop/runner.rb +25 -4
- data/lib/rubocop/target_finder.rb +6 -4
- data/lib/rubocop/target_ruby.rb +151 -0
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop.rb +53 -27
- metadata +73 -48
- data/lib/rubocop/cop/layout/align_array.rb +0 -39
- data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
- data/lib/rubocop/cop/mixin/safe_mode.rb +0 -24
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +0 -209
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
- data/lib/rubocop/string_util.rb +0 -14
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# rubocop:disable Metrics/ClassLength
|
4
3
|
module RuboCop
|
5
4
|
module Cop
|
6
5
|
module Style
|
@@ -43,7 +42,6 @@ module RuboCop
|
|
43
42
|
#
|
44
43
|
# @example EnforcedStyle: require_parentheses (default)
|
45
44
|
#
|
46
|
-
#
|
47
45
|
# # bad
|
48
46
|
# array.delete e
|
49
47
|
#
|
@@ -150,94 +148,23 @@ module RuboCop
|
|
150
148
|
include IgnoredMethods
|
151
149
|
include IgnoredPattern
|
152
150
|
|
153
|
-
|
151
|
+
def initialize(*)
|
152
|
+
super
|
153
|
+
return unless style_configured?
|
154
154
|
|
155
|
-
def on_send(node)
|
156
155
|
case style
|
157
156
|
when :require_parentheses
|
158
|
-
|
157
|
+
extend RequireParentheses
|
159
158
|
when :omit_parentheses
|
160
|
-
|
159
|
+
extend OmitParentheses
|
161
160
|
end
|
162
161
|
end
|
163
|
-
alias on_csend on_send
|
164
|
-
alias on_super on_send
|
165
|
-
alias on_yield on_send
|
166
162
|
|
167
|
-
|
168
|
-
|
169
|
-
when :require_parentheses
|
170
|
-
autocorrect_for_require_parentheses(node)
|
171
|
-
when :omit_parentheses
|
172
|
-
autocorrect_for_omit_parentheses(node)
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
def message(_node = nil)
|
177
|
-
case style
|
178
|
-
when :require_parentheses
|
179
|
-
'Use parentheses for method calls with arguments.'
|
180
|
-
when :omit_parentheses
|
181
|
-
'Omit parentheses for method calls with arguments.'
|
182
|
-
end
|
183
|
-
end
|
163
|
+
# @abstract Overridden in style modules
|
164
|
+
def autocorrect(_node); end
|
184
165
|
|
185
166
|
private
|
186
167
|
|
187
|
-
def add_offense_for_require_parentheses(node)
|
188
|
-
return if ignored_method?(node.method_name)
|
189
|
-
return if matches_ignored_pattern?(node.method_name)
|
190
|
-
return if eligible_for_parentheses_omission?(node)
|
191
|
-
return unless node.arguments? && !node.parenthesized?
|
192
|
-
|
193
|
-
add_offense(node)
|
194
|
-
end
|
195
|
-
|
196
|
-
def add_offense_for_omit_parentheses(node)
|
197
|
-
return unless node.parenthesized?
|
198
|
-
return if node.implicit_call?
|
199
|
-
return if super_call_without_arguments?(node)
|
200
|
-
return if allowed_camel_case_method_call?(node)
|
201
|
-
return if legitimate_call_with_parentheses?(node)
|
202
|
-
|
203
|
-
add_offense(node, location: node.loc.begin.join(node.loc.end))
|
204
|
-
end
|
205
|
-
|
206
|
-
def autocorrect_for_require_parentheses(node)
|
207
|
-
lambda do |corrector|
|
208
|
-
corrector.replace(args_begin(node), '(')
|
209
|
-
|
210
|
-
unless args_parenthesized?(node)
|
211
|
-
corrector.insert_after(args_end(node), ')')
|
212
|
-
end
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
def autocorrect_for_omit_parentheses(node)
|
217
|
-
lambda do |corrector|
|
218
|
-
if parentheses_at_the_end_of_multiline_call?(node)
|
219
|
-
corrector.replace(args_begin(node), ' \\')
|
220
|
-
else
|
221
|
-
corrector.replace(args_begin(node), ' ')
|
222
|
-
end
|
223
|
-
corrector.remove(node.loc.end)
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
def eligible_for_parentheses_omission?(node)
|
228
|
-
node.operator_method? || node.setter_method? || ignored_macro?(node)
|
229
|
-
end
|
230
|
-
|
231
|
-
def included_macros_list
|
232
|
-
cop_config.fetch('IncludedMacros', []).map(&:to_sym)
|
233
|
-
end
|
234
|
-
|
235
|
-
def ignored_macro?(node)
|
236
|
-
cop_config['IgnoreMacros'] &&
|
237
|
-
node.macro? &&
|
238
|
-
!included_macros_list.include?(node.method_name)
|
239
|
-
end
|
240
|
-
|
241
168
|
def args_begin(node)
|
242
169
|
loc = node.loc
|
243
170
|
selector =
|
@@ -257,132 +184,7 @@ module RuboCop
|
|
257
184
|
first_node = node.arguments.first
|
258
185
|
first_node.begin_type? && first_node.parenthesized_call?
|
259
186
|
end
|
260
|
-
|
261
|
-
def parentheses_at_the_end_of_multiline_call?(node)
|
262
|
-
node.multiline? &&
|
263
|
-
node.loc.begin.source_line
|
264
|
-
.gsub(TRAILING_WHITESPACE_REGEX, '')
|
265
|
-
.end_with?('(')
|
266
|
-
end
|
267
|
-
|
268
|
-
def super_call_without_arguments?(node)
|
269
|
-
node.super_type? && node.arguments.none?
|
270
|
-
end
|
271
|
-
|
272
|
-
def allowed_camel_case_method_call?(node)
|
273
|
-
node.camel_case_method? &&
|
274
|
-
(node.arguments.none? ||
|
275
|
-
cop_config['AllowParenthesesInCamelCaseMethod'])
|
276
|
-
end
|
277
|
-
|
278
|
-
def legitimate_call_with_parentheses?(node)
|
279
|
-
call_in_literals?(node) ||
|
280
|
-
call_with_ambiguous_arguments?(node) ||
|
281
|
-
call_in_logical_operators?(node) ||
|
282
|
-
call_in_optional_arguments?(node) ||
|
283
|
-
allowed_multiline_call_with_parentheses?(node) ||
|
284
|
-
allowed_chained_call_with_parentheses?(node)
|
285
|
-
end
|
286
|
-
|
287
|
-
def call_in_literals?(node)
|
288
|
-
node.parent &&
|
289
|
-
(node.parent.pair_type? ||
|
290
|
-
node.parent.array_type? ||
|
291
|
-
node.parent.range_type? ||
|
292
|
-
splat?(node.parent) ||
|
293
|
-
ternary_if?(node.parent))
|
294
|
-
end
|
295
|
-
|
296
|
-
def call_in_logical_operators?(node)
|
297
|
-
node.parent &&
|
298
|
-
(logical_operator?(node.parent) ||
|
299
|
-
node.parent.send_type? &&
|
300
|
-
node.parent.arguments.any?(&method(:logical_operator?)))
|
301
|
-
end
|
302
|
-
|
303
|
-
def call_in_optional_arguments?(node)
|
304
|
-
node.parent &&
|
305
|
-
(node.parent.optarg_type? || node.parent.kwoptarg_type?)
|
306
|
-
end
|
307
|
-
|
308
|
-
def call_with_ambiguous_arguments?(node)
|
309
|
-
call_with_braced_block?(node) ||
|
310
|
-
call_as_argument_or_chain?(node) ||
|
311
|
-
hash_literal_in_arguments?(node) ||
|
312
|
-
node.descendants.any? do |n|
|
313
|
-
ambigious_literal?(n) || logical_operator?(n) ||
|
314
|
-
call_with_braced_block?(n)
|
315
|
-
end
|
316
|
-
end
|
317
|
-
|
318
|
-
def call_with_braced_block?(node)
|
319
|
-
(node.send_type? || node.super_type?) &&
|
320
|
-
node.block_node && node.block_node.braces?
|
321
|
-
end
|
322
|
-
|
323
|
-
def call_as_argument_or_chain?(node)
|
324
|
-
node.parent &&
|
325
|
-
(node.parent.send_type? && !assigned_before?(node.parent, node) ||
|
326
|
-
node.parent.csend_type? || node.parent.super_type?)
|
327
|
-
end
|
328
|
-
|
329
|
-
def hash_literal_in_arguments?(node)
|
330
|
-
node.arguments.any? do |n|
|
331
|
-
hash_literal?(n) ||
|
332
|
-
n.send_type? && node.descendants.any?(&method(:hash_literal?))
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
def allowed_multiline_call_with_parentheses?(node)
|
337
|
-
cop_config['AllowParenthesesInMultilineCall'] && node.multiline?
|
338
|
-
end
|
339
|
-
|
340
|
-
def allowed_chained_call_with_parentheses?(node)
|
341
|
-
return false unless cop_config['AllowParenthesesInChaining']
|
342
|
-
|
343
|
-
previous = node.descendants.first
|
344
|
-
return false unless previous&.send_type?
|
345
|
-
|
346
|
-
previous.parenthesized? ||
|
347
|
-
allowed_chained_call_with_parentheses?(previous)
|
348
|
-
end
|
349
|
-
|
350
|
-
def ambigious_literal?(node)
|
351
|
-
splat?(node) || ternary_if?(node) || regexp_slash_literal?(node) ||
|
352
|
-
unary_literal?(node)
|
353
|
-
end
|
354
|
-
|
355
|
-
def splat?(node)
|
356
|
-
node.splat_type? || node.kwsplat_type? || node.block_pass_type?
|
357
|
-
end
|
358
|
-
|
359
|
-
def ternary_if?(node)
|
360
|
-
node.if_type? && node.ternary?
|
361
|
-
end
|
362
|
-
|
363
|
-
def logical_operator?(node)
|
364
|
-
(node.and_type? || node.or_type?) && node.logical_operator?
|
365
|
-
end
|
366
|
-
|
367
|
-
def hash_literal?(node)
|
368
|
-
node.hash_type? && node.braces?
|
369
|
-
end
|
370
|
-
|
371
|
-
def regexp_slash_literal?(node)
|
372
|
-
node.regexp_type? && node.loc.begin.source == '/'
|
373
|
-
end
|
374
|
-
|
375
|
-
def unary_literal?(node)
|
376
|
-
node.numeric_type? && node.sign? ||
|
377
|
-
node.parent&.send_type? && node.parent&.unary_operation?
|
378
|
-
end
|
379
|
-
|
380
|
-
def assigned_before?(node, target)
|
381
|
-
node.assignment? &&
|
382
|
-
node.loc.operator.begin < target.loc.begin
|
383
|
-
end
|
384
187
|
end
|
385
188
|
end
|
386
189
|
end
|
387
190
|
end
|
388
|
-
# rubocop:enable Metrics/ClassLength
|
@@ -72,7 +72,7 @@ module RuboCop
|
|
72
72
|
between = prev_mixin.loc.expression.end
|
73
73
|
.join(range.begin)
|
74
74
|
# if separated from previous mixin with only whitespace?
|
75
|
-
|
75
|
+
unless /\S/.match?(between.source)
|
76
76
|
range = range.join(between) # then remove that too
|
77
77
|
end
|
78
78
|
range
|
@@ -103,7 +103,7 @@ module RuboCop
|
|
103
103
|
.select(&:macro?)
|
104
104
|
|
105
105
|
siblings.select do |sibling_node|
|
106
|
-
sibling_node.
|
106
|
+
sibling_node.method?(send_node.method_name)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
6
6
|
# This cop checks for use of `extend self` or `module_function` in a
|
7
7
|
# module.
|
8
8
|
#
|
9
|
-
# Supported styles are: module_function, extend_self.
|
9
|
+
# Supported styles are: module_function, extend_self, forbidden.
|
10
10
|
#
|
11
11
|
# @example EnforcedStyle: module_function (default)
|
12
12
|
# # bad
|
@@ -46,6 +46,29 @@ module RuboCop
|
|
46
46
|
# # ...
|
47
47
|
# end
|
48
48
|
#
|
49
|
+
# The option `forbidden` prohibits the usage of both styles.
|
50
|
+
#
|
51
|
+
# @example EnforcedStyle: forbidden
|
52
|
+
# # bad
|
53
|
+
# module Test
|
54
|
+
# module_function
|
55
|
+
# # ...
|
56
|
+
# end
|
57
|
+
#
|
58
|
+
# # bad
|
59
|
+
# module Test
|
60
|
+
# extend self
|
61
|
+
# # ...
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
# # bad
|
65
|
+
# module Test
|
66
|
+
# extend self
|
67
|
+
# # ...
|
68
|
+
# private
|
69
|
+
# # ...
|
70
|
+
# end
|
71
|
+
#
|
49
72
|
# These offenses are not safe to auto-correct since there are different
|
50
73
|
# implications to each approach.
|
51
74
|
class ModuleFunction < Cop
|
@@ -55,6 +78,8 @@ module RuboCop
|
|
55
78
|
'Use `module_function` instead of `extend self`.'
|
56
79
|
EXTEND_SELF_MSG =
|
57
80
|
'Use `extend self` instead of `module_function`.'
|
81
|
+
FORBIDDEN_MSG =
|
82
|
+
'Do not use `module_function` or `extend self`.'
|
58
83
|
|
59
84
|
def_node_matcher :module_function_node?, '(send nil? :module_function)'
|
60
85
|
def_node_matcher :extend_self_node?, '(send nil? :extend self)'
|
@@ -69,33 +94,54 @@ module RuboCop
|
|
69
94
|
end
|
70
95
|
|
71
96
|
def autocorrect(node)
|
97
|
+
return if style == :forbidden
|
98
|
+
|
72
99
|
lambda do |corrector|
|
73
100
|
if extend_self_node?(node)
|
74
|
-
corrector.replace(node
|
101
|
+
corrector.replace(node, 'module_function')
|
75
102
|
else
|
76
|
-
corrector.replace(node
|
103
|
+
corrector.replace(node, 'extend self')
|
77
104
|
end
|
78
105
|
end
|
79
106
|
end
|
80
107
|
|
81
108
|
private
|
82
109
|
|
83
|
-
def each_wrong_style(nodes)
|
110
|
+
def each_wrong_style(nodes, &block)
|
84
111
|
case style
|
85
112
|
when :module_function
|
86
|
-
|
87
|
-
|
88
|
-
nodes.each do |node|
|
89
|
-
yield node if extend_self_node?(node) && !private_directive
|
90
|
-
end
|
113
|
+
check_module_function(nodes, &block)
|
91
114
|
when :extend_self
|
92
|
-
nodes
|
93
|
-
|
94
|
-
|
115
|
+
check_extend_self(nodes, &block)
|
116
|
+
when :forbidden
|
117
|
+
check_forbidden(nodes, &block)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def check_module_function(nodes)
|
122
|
+
private_directive = nodes.any? { |node| private_directive?(node) }
|
123
|
+
|
124
|
+
nodes.each do |node|
|
125
|
+
yield node if extend_self_node?(node) && !private_directive
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def check_extend_self(nodes)
|
130
|
+
nodes.each do |node|
|
131
|
+
yield node if module_function_node?(node)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def check_forbidden(nodes)
|
136
|
+
nodes.each do |node|
|
137
|
+
yield node if extend_self_node?(node)
|
138
|
+
yield node if module_function_node?(node)
|
95
139
|
end
|
96
140
|
end
|
97
141
|
|
98
142
|
def message(_node)
|
143
|
+
return FORBIDDEN_MSG if style == :forbidden
|
144
|
+
|
99
145
|
style == :module_function ? MODULE_FUNCTION_MSG : EXTEND_SELF_MSG
|
100
146
|
end
|
101
147
|
end
|
@@ -22,6 +22,12 @@ module RuboCop
|
|
22
22
|
# when bar then do_something
|
23
23
|
# end
|
24
24
|
#
|
25
|
+
# # good
|
26
|
+
# case foo
|
27
|
+
# when bar then do_something(arg1,
|
28
|
+
# arg2)
|
29
|
+
# end
|
30
|
+
#
|
25
31
|
class MultilineWhenThen < Cop
|
26
32
|
include RangeHelp
|
27
33
|
|
@@ -32,10 +38,13 @@ module RuboCop
|
|
32
38
|
return unless node.then?
|
33
39
|
|
34
40
|
# Single line usage of `then` is not an offense
|
35
|
-
return if !node.children.last.nil? && !node.multiline?
|
41
|
+
return if !node.children.last.nil? && !node.multiline?
|
42
|
+
|
43
|
+
# Requires `then` for write `when` and its body on the same line.
|
44
|
+
return if require_then?(node)
|
36
45
|
|
37
46
|
# With more than one statements after then, there's not offense
|
38
|
-
return if node.
|
47
|
+
return if accept_node_type?(node.body)
|
39
48
|
|
40
49
|
add_offense(node, location: :begin)
|
41
50
|
end
|
@@ -49,6 +58,16 @@ module RuboCop
|
|
49
58
|
)
|
50
59
|
end
|
51
60
|
end
|
61
|
+
|
62
|
+
def require_then?(when_node)
|
63
|
+
return false unless when_node.body
|
64
|
+
|
65
|
+
when_node.loc.line == when_node.body.loc.line
|
66
|
+
end
|
67
|
+
|
68
|
+
def accept_node_type?(node)
|
69
|
+
node&.begin_type? || node&.array_type? || node&.hash_type?
|
70
|
+
end
|
52
71
|
end
|
53
72
|
end
|
54
73
|
end
|
@@ -77,11 +77,9 @@ module RuboCop
|
|
77
77
|
if splat_value
|
78
78
|
correct_splat_expansion(corrector, expr, splat_value)
|
79
79
|
elsif node.array_type? && !node.bracketed?
|
80
|
-
corrector.
|
81
|
-
corrector.insert_after(expr, ']')
|
80
|
+
corrector.wrap(expr, '[', ']')
|
82
81
|
elsif requires_parentheses?(node)
|
83
|
-
corrector.
|
84
|
-
corrector.insert_after(expr, ')')
|
82
|
+
corrector.wrap(expr, '(', ')')
|
85
83
|
end
|
86
84
|
|
87
85
|
corrector.insert_after(expr, '.freeze')
|
@@ -8,10 +8,10 @@ module RuboCop
|
|
8
8
|
#
|
9
9
|
# @example
|
10
10
|
# # good
|
11
|
-
# method1(method2(arg)
|
11
|
+
# method1(method2(arg))
|
12
12
|
#
|
13
13
|
# # bad
|
14
|
-
# method1(method2 arg
|
14
|
+
# method1(method2 arg)
|
15
15
|
class NestedParenthesizedCalls < Cop
|
16
16
|
include RangeHelp
|
17
17
|
|
@@ -35,8 +35,8 @@ module RuboCop
|
|
35
35
|
last_arg = nested.last_argument.source_range
|
36
36
|
|
37
37
|
leading_space =
|
38
|
-
range_with_surrounding_space(range: first_arg,
|
39
|
-
side: :left)
|
38
|
+
range_with_surrounding_space(range: first_arg.begin,
|
39
|
+
side: :left)
|
40
40
|
|
41
41
|
lambda do |corrector|
|
42
42
|
corrector.replace(leading_space, '(')
|
@@ -49,17 +49,17 @@ module RuboCop
|
|
49
49
|
def allowed_omission?(send_node)
|
50
50
|
!send_node.arguments? || send_node.parenthesized? ||
|
51
51
|
send_node.setter_method? || send_node.operator_method? ||
|
52
|
-
|
52
|
+
allowed?(send_node)
|
53
53
|
end
|
54
54
|
|
55
|
-
def
|
55
|
+
def allowed?(send_node)
|
56
56
|
send_node.parent.arguments.one? &&
|
57
|
-
|
57
|
+
allowed_methods.include?(send_node.method_name.to_s) &&
|
58
58
|
send_node.arguments.one?
|
59
59
|
end
|
60
60
|
|
61
|
-
def
|
62
|
-
cop_config['
|
61
|
+
def allowed_methods
|
62
|
+
cop_config['AllowedMethods'] || []
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -20,18 +20,18 @@ module RuboCop
|
|
20
20
|
# end
|
21
21
|
#
|
22
22
|
# # good
|
23
|
-
# [1, 2].each do |
|
24
|
-
# puts
|
23
|
+
# [1, 2].each do |a|
|
24
|
+
# puts a if a == 1
|
25
25
|
# end
|
26
26
|
#
|
27
27
|
# @example EnforcedStyle: always
|
28
28
|
# # With `always` all conditions at the end of an iteration needs to be
|
29
29
|
# # replaced by next - with `skip_modifier_ifs` the modifier if like
|
30
|
-
# # this one are ignored: `[1, 2].each { |a|
|
30
|
+
# # this one are ignored: `[1, 2].each { |a| puts a if a == 1 }`
|
31
31
|
#
|
32
32
|
# # bad
|
33
|
-
# [1, 2].each do |
|
34
|
-
# puts
|
33
|
+
# [1, 2].each do |a|
|
34
|
+
# puts a if a == 1
|
35
35
|
# end
|
36
36
|
#
|
37
37
|
# # bad
|
@@ -152,13 +152,13 @@ module RuboCop
|
|
152
152
|
"next #{node.inverse_keyword} #{node.condition.source}\n" \
|
153
153
|
"#{' ' * node.source_range.column}#{body.source}"
|
154
154
|
|
155
|
-
corrector.replace(node
|
155
|
+
corrector.replace(node, replacement)
|
156
156
|
end
|
157
157
|
|
158
158
|
def autocorrect_block(corrector, node)
|
159
159
|
next_code = "next #{node.inverse_keyword} #{node.condition.source}"
|
160
160
|
|
161
|
-
corrector.insert_before(node
|
161
|
+
corrector.insert_before(node, next_code)
|
162
162
|
|
163
163
|
corrector.remove(cond_range(node, node.condition))
|
164
164
|
corrector.remove(end_range(node))
|
@@ -111,15 +111,15 @@ module RuboCop
|
|
111
111
|
|
112
112
|
return if expr == new_code
|
113
113
|
|
114
|
-
->(corrector) { corrector.replace(node
|
114
|
+
->(corrector) { corrector.replace(node, new_code) }
|
115
115
|
end
|
116
116
|
|
117
117
|
def autocorrect_non_nil(node, inner_node)
|
118
118
|
lambda do |corrector|
|
119
119
|
if inner_node.receiver
|
120
|
-
corrector.replace(node
|
120
|
+
corrector.replace(node, inner_node.receiver.source)
|
121
121
|
else
|
122
|
-
corrector.replace(node
|
122
|
+
corrector.replace(node, 'self')
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
@@ -127,7 +127,7 @@ module RuboCop
|
|
127
127
|
def autocorrect_unless_nil(node, receiver)
|
128
128
|
lambda do |corrector|
|
129
129
|
corrector.replace(node.parent.loc.keyword, 'if')
|
130
|
-
corrector.replace(node
|
130
|
+
corrector.replace(node, receiver.source)
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|
@@ -9,18 +9,22 @@ module RuboCop
|
|
9
9
|
# @example
|
10
10
|
#
|
11
11
|
# # bad
|
12
|
-
#
|
13
12
|
# 1000000
|
14
13
|
# 1_00_000
|
15
14
|
# 1_0000
|
16
15
|
#
|
17
16
|
# # good
|
18
|
-
#
|
19
17
|
# 1_000_000
|
20
18
|
# 1000
|
21
19
|
#
|
22
|
-
#
|
20
|
+
# @example Strict: false (default)
|
23
21
|
#
|
22
|
+
# # good
|
23
|
+
# 10_000_00 # typical representation of $10,000 in cents
|
24
|
+
#
|
25
|
+
# @example Strict: true
|
26
|
+
#
|
27
|
+
# # bad
|
24
28
|
# 10_000_00 # typical representation of $10,000 in cents
|
25
29
|
#
|
26
30
|
class NumericLiterals < Cop
|
@@ -44,7 +48,7 @@ module RuboCop
|
|
44
48
|
|
45
49
|
def autocorrect(node)
|
46
50
|
lambda do |corrector|
|
47
|
-
corrector.replace(node
|
51
|
+
corrector.replace(node, format_number(node))
|
48
52
|
end
|
49
53
|
end
|
50
54
|
|
@@ -54,9 +54,10 @@ module RuboCop
|
|
54
54
|
}.freeze
|
55
55
|
|
56
56
|
def on_send(node)
|
57
|
-
return if node.
|
58
|
-
|
59
|
-
|
57
|
+
return if ignored_method?(node.method_name) ||
|
58
|
+
node.each_ancestor(:send, :block).any? do |ancestor|
|
59
|
+
ignored_method?(ancestor.method_name)
|
60
|
+
end
|
60
61
|
|
61
62
|
numeric, replacement = check(node)
|
62
63
|
|
@@ -72,7 +73,7 @@ module RuboCop
|
|
72
73
|
_, replacement = check(node)
|
73
74
|
|
74
75
|
lambda do |corrector|
|
75
|
-
corrector.replace(node
|
76
|
+
corrector.replace(node, replacement)
|
76
77
|
end
|
77
78
|
end
|
78
79
|
|