rubocop 0.81.0 → 0.85.1
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 +13 -17
- data/config/default.yml +141 -35
- data/lib/rubocop.rb +17 -61
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cli.rb +13 -7
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -2
- data/lib/rubocop/cli/command/show_cops.rb +2 -6
- data/lib/rubocop/comment_config.rb +1 -1
- data/lib/rubocop/config.rb +14 -2
- data/lib/rubocop/config_loader.rb +37 -33
- data/lib/rubocop/config_loader_resolver.rb +45 -6
- data/lib/rubocop/config_obsoletion.rb +1 -0
- data/lib/rubocop/config_store.rb +12 -2
- data/lib/rubocop/config_validator.rb +18 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
- data/lib/rubocop/cop/badge.rb +5 -5
- data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
- data/lib/rubocop/cop/commissioner.rb +0 -21
- data/lib/rubocop/cop/cop.rb +36 -21
- data/lib/rubocop/cop/corrector.rb +48 -24
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +4 -8
- 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 +4 -4
- 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 -3
- data/lib/rubocop/cop/correctors/string_literal_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
- data/lib/rubocop/cop/generator.rb +4 -3
- data/lib/rubocop/cop/ignored_node.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +1 -1
- data/lib/rubocop/cop/layout/case_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/class_structure.rb +19 -16
- 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/empty_lines_around_access_modifier.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +126 -0
- data/lib/rubocop/cop/layout/end_of_line.rb +2 -2
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +1 -3
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +14 -10
- data/lib/rubocop/cop/layout/first_array_element_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/first_hash_element_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -3
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/hash_alignment.rb +6 -6
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +5 -9
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +21 -104
- data/lib/rubocop/cop/layout/{tab.rb → indentation_style.rb} +48 -6
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
- data/lib/rubocop/cop/layout/leading_comment_space.rb +1 -1
- data/lib/rubocop/cop/layout/line_length.rb +23 -20
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +3 -3
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +131 -0
- data/lib/rubocop/cop/layout/space_around_operators.rb +19 -2
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_in_lambda_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_range_literal.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
- data/lib/rubocop/cop/layout/trailing_whitespace.rb +2 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +41 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +14 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +2 -2
- data/lib/rubocop/cop/lint/debugger.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
- data/lib/rubocop/cop/lint/empty_when.rb +29 -6
- data/lib/rubocop/cop/lint/ensure_return.rb +19 -2
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -3
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +33 -2
- data/lib/rubocop/cop/lint/implicit_string_concatenation.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 +1 -1
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +69 -0
- data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
- data/lib/rubocop/cop/lint/number_conversion.rb +1 -1
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +33 -11
- data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
- data/lib/rubocop/cop/lint/raise_exception.rb +42 -6
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +1 -6
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +11 -4
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/unified_integer.rb +0 -2
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +4 -4
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +13 -3
- data/lib/rubocop/cop/lint/useless_assignment.rb +3 -2
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/migration/department_name.rb +7 -7
- data/lib/rubocop/cop/mixin/alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +2 -4
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +9 -2
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
- data/lib/rubocop/cop/mixin/line_length_help.rb +3 -2
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +16 -0
- data/lib/rubocop/cop/mixin/statement_modifier.rb +7 -22
- data/lib/rubocop/cop/mixin/target_ruby_version.rb +5 -1
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
- data/lib/rubocop/cop/naming/constant_name.rb +2 -1
- data/lib/rubocop/cop/naming/file_name.rb +27 -14
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +1 -5
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +1 -1
- data/lib/rubocop/cop/registry.rb +74 -14
- data/lib/rubocop/cop/severity.rb +1 -3
- data/lib/rubocop/cop/style/alias.rb +4 -4
- data/lib/rubocop/cop/style/and_or.rb +7 -8
- data/lib/rubocop/cop/style/array_join.rb +2 -2
- data/lib/rubocop/cop/style/attr.rb +1 -3
- data/lib/rubocop/cop/style/bare_percent_literals.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -8
- 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/conditional_assignment.rb +9 -11
- data/lib/rubocop/cop/style/copyright.rb +3 -3
- 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/double_cop_disable_directive.rb +1 -1
- data/lib/rubocop/cop/style/double_negation.rb +41 -4
- 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_literal.rb +1 -3
- data/lib/rubocop/cop/style/empty_method.rb +2 -6
- data/lib/rubocop/cop/style/even_odd.rb +1 -1
- 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/format_string_token.rb +2 -3
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +3 -6
- data/lib/rubocop/cop/style/guard_clause.rb +25 -2
- data/lib/rubocop/cop/style/hash_each_methods.rb +4 -4
- data/lib/rubocop/cop/style/hash_syntax.rb +19 -12
- data/lib/rubocop/cop/style/hash_transform_values.rb +0 -3
- data/lib/rubocop/cop/style/if_unless_modifier.rb +23 -3
- data/lib/rubocop/cop/style/if_with_semicolon.rb +16 -0
- data/lib/rubocop/cop/style/inline_comment.rb +1 -1
- data/lib/rubocop/cop/style/lambda.rb +2 -2
- data/lib/rubocop/cop/style/lambda_call.rb +1 -21
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb +1 -3
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -3
- data/lib/rubocop/cop/style/mixin_grouping.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +2 -2
- 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_when_then.rb +16 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +2 -4
- data/lib/rubocop/cop/style/negated_if.rb +3 -3
- data/lib/rubocop/cop/style/negated_unless.rb +3 -3
- data/lib/rubocop/cop/style/next.rb +2 -2
- data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
- data/lib/rubocop/cop/style/non_nil_check.rb +5 -5
- 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 +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
- data/lib/rubocop/cop/style/one_line_conditional.rb +3 -7
- data/lib/rubocop/cop/style/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/or_assignment.rb +1 -1
- 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 +3 -4
- data/lib/rubocop/cop/style/redundant_conditional.rb +5 -4
- 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 +2 -6
- data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +89 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +130 -0
- data/lib/rubocop/cop/style/redundant_return.rb +5 -7
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- 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 +3 -7
- 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 +3 -7
- 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 +2 -2
- data/lib/rubocop/cop/style/symbol_literal.rb +2 -2
- data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -5
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -3
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +3 -3
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +16 -13
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +3 -3
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_else.rb +1 -1
- 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/when_then.rb +1 -1
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +1 -1
- data/lib/rubocop/cop/team.rb +69 -25
- data/lib/rubocop/cop/util.rb +25 -1
- data/lib/rubocop/cop/utils/format_string.rb +18 -0
- data/lib/rubocop/cop/variable_force.rb +3 -9
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
- data/lib/rubocop/cop/variable_force/branch.rb +1 -3
- data/lib/rubocop/cop/variable_force/scope.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +3 -6
- data/lib/rubocop/ext/processed_source.rb +18 -0
- data/lib/rubocop/formatter/base_formatter.rb +0 -4
- data/lib/rubocop/formatter/disabled_config_formatter.rb +4 -12
- data/lib/rubocop/formatter/formatter_set.rb +1 -4
- data/lib/rubocop/formatter/junit_formatter.rb +14 -4
- data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/name_similarity.rb +12 -9
- data/lib/rubocop/options.rb +33 -12
- data/lib/rubocop/remote_config.rb +1 -3
- data/lib/rubocop/result_cache.rb +5 -7
- data/lib/rubocop/rspec/cop_helper.rb +3 -26
- data/lib/rubocop/rspec/expect_offense.rb +49 -16
- data/lib/rubocop/rspec/shared_contexts.rb +54 -20
- data/lib/rubocop/runner.rb +21 -14
- data/lib/rubocop/target_finder.rb +7 -7
- data/lib/rubocop/target_ruby.rb +5 -2
- data/lib/rubocop/version.rb +5 -3
- metadata +47 -77
- data/lib/rubocop/ast/builder.rb +0 -85
- data/lib/rubocop/ast/node.rb +0 -637
- data/lib/rubocop/ast/node/alias_node.rb +0 -24
- data/lib/rubocop/ast/node/and_node.rb +0 -29
- data/lib/rubocop/ast/node/args_node.rb +0 -29
- data/lib/rubocop/ast/node/array_node.rb +0 -57
- data/lib/rubocop/ast/node/block_node.rb +0 -121
- data/lib/rubocop/ast/node/break_node.rb +0 -17
- data/lib/rubocop/ast/node/case_match_node.rb +0 -56
- data/lib/rubocop/ast/node/case_node.rb +0 -56
- data/lib/rubocop/ast/node/class_node.rb +0 -31
- data/lib/rubocop/ast/node/def_node.rb +0 -82
- data/lib/rubocop/ast/node/defined_node.rb +0 -17
- data/lib/rubocop/ast/node/ensure_node.rb +0 -17
- data/lib/rubocop/ast/node/float_node.rb +0 -12
- data/lib/rubocop/ast/node/for_node.rb +0 -53
- data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
- data/lib/rubocop/ast/node/hash_node.rb +0 -109
- data/lib/rubocop/ast/node/if_node.rb +0 -175
- data/lib/rubocop/ast/node/int_node.rb +0 -12
- data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
- data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
- data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -261
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +0 -114
- data/lib/rubocop/ast/node/mixin/modifier_node.rb +0 -17
- data/lib/rubocop/ast/node/mixin/numeric_node.rb +0 -21
- data/lib/rubocop/ast/node/mixin/parameterized_node.rb +0 -61
- data/lib/rubocop/ast/node/mixin/predicate_operator_node.rb +0 -35
- data/lib/rubocop/ast/node/module_node.rb +0 -24
- data/lib/rubocop/ast/node/or_node.rb +0 -29
- data/lib/rubocop/ast/node/pair_node.rb +0 -63
- data/lib/rubocop/ast/node/range_node.rb +0 -18
- data/lib/rubocop/ast/node/regexp_node.rb +0 -33
- data/lib/rubocop/ast/node/resbody_node.rb +0 -24
- data/lib/rubocop/ast/node/retry_node.rb +0 -17
- data/lib/rubocop/ast/node/return_node.rb +0 -24
- data/lib/rubocop/ast/node/self_class_node.rb +0 -24
- data/lib/rubocop/ast/node/send_node.rb +0 -13
- data/lib/rubocop/ast/node/str_node.rb +0 -16
- data/lib/rubocop/ast/node/super_node.rb +0 -21
- data/lib/rubocop/ast/node/symbol_node.rb +0 -12
- data/lib/rubocop/ast/node/until_node.rb +0 -35
- data/lib/rubocop/ast/node/when_node.rb +0 -53
- data/lib/rubocop/ast/node/while_node.rb +0 -35
- data/lib/rubocop/ast/node/yield_node.rb +0 -21
- data/lib/rubocop/ast/sexp.rb +0 -16
- data/lib/rubocop/ast/traversal.rb +0 -202
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +0 -57
- data/lib/rubocop/node_pattern.rb +0 -887
- data/lib/rubocop/processed_source.rb +0 -216
- data/lib/rubocop/string_util.rb +0 -14
- data/lib/rubocop/token.rb +0 -114
@@ -72,18 +72,18 @@ module RuboCop
|
|
72
72
|
|
73
73
|
# Removes the source range.
|
74
74
|
#
|
75
|
-
# @param [Parser::Source::Range] range
|
76
|
-
def remove(
|
77
|
-
|
75
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
76
|
+
def remove(node_or_range)
|
77
|
+
range = to_range(node_or_range)
|
78
78
|
@source_rewriter.remove(range)
|
79
79
|
end
|
80
80
|
|
81
81
|
# Inserts new code before the given source range.
|
82
82
|
#
|
83
|
-
# @param [Parser::Source::Range] range
|
83
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
84
84
|
# @param [String] content
|
85
|
-
def insert_before(
|
86
|
-
|
85
|
+
def insert_before(node_or_range, content)
|
86
|
+
range = to_range(node_or_range)
|
87
87
|
# TODO: Fix Cops using bad ranges instead
|
88
88
|
if range.end_pos > @source_buffer.source.size
|
89
89
|
range = range.with(end_pos: @source_buffer.source.size)
|
@@ -94,28 +94,38 @@ module RuboCop
|
|
94
94
|
|
95
95
|
# Inserts new code after the given source range.
|
96
96
|
#
|
97
|
-
# @param [Parser::Source::Range] range
|
97
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
98
98
|
# @param [String] content
|
99
|
-
def insert_after(
|
100
|
-
|
99
|
+
def insert_after(node_or_range, content)
|
100
|
+
range = to_range(node_or_range)
|
101
101
|
@source_rewriter.insert_after(range, content)
|
102
102
|
end
|
103
103
|
|
104
|
+
# Wraps the given source range with the given before and after texts
|
105
|
+
#
|
106
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
107
|
+
# @param [String] before
|
108
|
+
# @param [String] after
|
109
|
+
def wrap(node_or_range, before, after)
|
110
|
+
range = to_range(node_or_range)
|
111
|
+
@source_rewriter.wrap(range, before, after)
|
112
|
+
end
|
113
|
+
|
104
114
|
# Replaces the code of the source range `range` with `content`.
|
105
115
|
#
|
106
|
-
# @param [Parser::Source::Range] range
|
116
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
107
117
|
# @param [String] content
|
108
|
-
def replace(
|
109
|
-
|
118
|
+
def replace(node_or_range, content)
|
119
|
+
range = to_range(node_or_range)
|
110
120
|
@source_rewriter.replace(range, content)
|
111
121
|
end
|
112
122
|
|
113
123
|
# Removes `size` characters prior to the source range.
|
114
124
|
#
|
115
|
-
# @param [Parser::Source::Range] range
|
125
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
116
126
|
# @param [Integer] size
|
117
|
-
def remove_preceding(
|
118
|
-
|
127
|
+
def remove_preceding(node_or_range, size)
|
128
|
+
range = to_range(node_or_range)
|
119
129
|
to_remove = Parser::Source::Range.new(range.source_buffer,
|
120
130
|
range.begin_pos - size,
|
121
131
|
range.begin_pos)
|
@@ -126,10 +136,10 @@ module RuboCop
|
|
126
136
|
# If `size` is greater than the size of `range`, the removed region can
|
127
137
|
# overrun the end of `range`.
|
128
138
|
#
|
129
|
-
# @param [Parser::Source::Range] range
|
139
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
130
140
|
# @param [Integer] size
|
131
|
-
def remove_leading(
|
132
|
-
|
141
|
+
def remove_leading(node_or_range, size)
|
142
|
+
range = to_range(node_or_range)
|
133
143
|
to_remove = Parser::Source::Range.new(range.source_buffer,
|
134
144
|
range.begin_pos,
|
135
145
|
range.begin_pos + size)
|
@@ -140,10 +150,10 @@ module RuboCop
|
|
140
150
|
# If `size` is greater than the size of `range`, the removed region can
|
141
151
|
# overrun the beginning of `range`.
|
142
152
|
#
|
143
|
-
# @param [Parser::Source::Range] range
|
153
|
+
# @param [Parser::Source::Range, Rubocop::AST::Node] range or node
|
144
154
|
# @param [Integer] size
|
145
|
-
def remove_trailing(
|
146
|
-
|
155
|
+
def remove_trailing(node_or_range, size)
|
156
|
+
range = to_range(node_or_range)
|
147
157
|
to_remove = Parser::Source::Range.new(range.source_buffer,
|
148
158
|
range.end_pos - size,
|
149
159
|
range.end_pos)
|
@@ -153,11 +163,25 @@ module RuboCop
|
|
153
163
|
private
|
154
164
|
|
155
165
|
# :nodoc:
|
156
|
-
def
|
157
|
-
|
166
|
+
def to_range(node_or_range)
|
167
|
+
range = case node_or_range
|
168
|
+
when ::RuboCop::AST::Node, ::Parser::Source::Comment
|
169
|
+
node_or_range.loc.expression
|
170
|
+
when ::Parser::Source::Range
|
171
|
+
node_or_range
|
172
|
+
else
|
173
|
+
raise TypeError,
|
174
|
+
'Expected a Parser::Source::Range, Comment or ' \
|
175
|
+
"Rubocop::AST::Node, got #{node_or_range.class}"
|
176
|
+
end
|
177
|
+
validate_buffer(range.source_buffer)
|
178
|
+
range
|
179
|
+
end
|
180
|
+
|
181
|
+
def validate_buffer(buffer)
|
158
182
|
return if buffer == @source_buffer
|
159
183
|
|
160
|
-
unless buffer.is_a?(Parser::Source::Buffer)
|
184
|
+
unless buffer.is_a?(::Parser::Source::Buffer)
|
161
185
|
# actually this should be enforced by parser gem
|
162
186
|
raise 'Corrector expected range source buffer to be a ' \
|
163
187
|
"Parser::Source::Buffer, but got #{buffer.class}"
|
@@ -48,10 +48,8 @@ module RuboCop
|
|
48
48
|
return if taboo_ranges.any? { |t| within?(range, t) }
|
49
49
|
|
50
50
|
if column_delta.positive?
|
51
|
-
unless range.resize(1).source == "\n"
|
52
|
-
|
53
|
-
end
|
54
|
-
elsif range.source =~ /\A[ \t]+\z/
|
51
|
+
corrector.insert_before(range, ' ' * column_delta) unless range.resize(1).source == "\n"
|
52
|
+
elsif /\A[ \t]+\z/.match?(range.source)
|
55
53
|
remove(range, corrector)
|
56
54
|
end
|
57
55
|
end
|
@@ -92,9 +90,7 @@ module RuboCop
|
|
92
90
|
end
|
93
91
|
|
94
92
|
def calculate_range(expr, line_begin_pos, column_delta)
|
95
|
-
if column_delta.positive?
|
96
|
-
return range_between(line_begin_pos, line_begin_pos)
|
97
|
-
end
|
93
|
+
return range_between(line_begin_pos, line_begin_pos) if column_delta.positive?
|
98
94
|
|
99
95
|
starts_with_space =
|
100
96
|
expr.source_buffer.source[line_begin_pos].start_with?(' ')
|
@@ -112,7 +108,7 @@ module RuboCop
|
|
112
108
|
corrector.remove(range)
|
113
109
|
rescue RuntimeError
|
114
110
|
range = range_between(range.begin_pos + 1, range.end_pos + 1)
|
115
|
-
retry if range.source
|
111
|
+
retry if /^ +$/.match?(range.source)
|
116
112
|
ensure
|
117
113
|
$stderr = original_stderr
|
118
114
|
end
|
@@ -10,8 +10,7 @@ module RuboCop
|
|
10
10
|
|
11
11
|
lambda do |corrector|
|
12
12
|
corrector.replace(node.loc.keyword, node.inverse_keyword)
|
13
|
-
corrector.replace(condition.
|
14
|
-
condition.children.first.source)
|
13
|
+
corrector.replace(condition, condition.children.first.source)
|
15
14
|
end
|
16
15
|
end
|
17
16
|
|
@@ -44,13 +44,13 @@ module RuboCop
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def replace_selector(corrector)
|
47
|
-
corrector.replace(method
|
47
|
+
corrector.replace(method, 'lambda')
|
48
48
|
end
|
49
49
|
|
50
50
|
def remove_arguments(corrector)
|
51
51
|
return if arguments.empty_and_without_delimiters?
|
52
52
|
|
53
|
-
corrector.remove(arguments
|
53
|
+
corrector.remove(arguments)
|
54
54
|
end
|
55
55
|
|
56
56
|
def insert_arguments(corrector)
|
@@ -62,7 +62,7 @@ module RuboCop
|
|
62
62
|
|
63
63
|
def remove_leading_whitespace(corrector)
|
64
64
|
corrector.remove_preceding(
|
65
|
-
arguments
|
65
|
+
arguments,
|
66
66
|
arguments.source_range.begin_pos -
|
67
67
|
block_node.send_node.source_range.end_pos
|
68
68
|
)
|
@@ -129,7 +129,7 @@ module RuboCop
|
|
129
129
|
end
|
130
130
|
|
131
131
|
def separating_space?
|
132
|
-
block_begin.source_buffer.source[block_begin.begin_pos + 2].match(/\s/)
|
132
|
+
block_begin.source_buffer.source[block_begin.begin_pos + 2].match?(/\s/)
|
133
133
|
end
|
134
134
|
end
|
135
135
|
end
|
@@ -38,9 +38,9 @@ module RuboCop
|
|
38
38
|
return unless eol_comment
|
39
39
|
|
40
40
|
text = eol_comment.loc.expression.source
|
41
|
-
corrector.insert_before(node
|
41
|
+
corrector.insert_before(node,
|
42
42
|
text + "\n" + (' ' * node.loc.keyword.column))
|
43
|
-
corrector.remove(eol_comment
|
43
|
+
corrector.remove(eol_comment)
|
44
44
|
end
|
45
45
|
|
46
46
|
private
|
@@ -35,9 +35,7 @@ module RuboCop
|
|
35
35
|
|
36
36
|
def add_space(processed_source, corrector, left_token, right_token)
|
37
37
|
@processed_source = processed_source
|
38
|
-
unless left_token.space_after?
|
39
|
-
corrector.insert_after(left_token.pos, ' ')
|
40
|
-
end
|
38
|
+
corrector.insert_after(left_token.pos, ' ') unless left_token.space_after?
|
41
39
|
return if right_token.space_before?
|
42
40
|
|
43
41
|
corrector.insert_before(right_token.pos, ' ')
|
@@ -13,9 +13,9 @@ module RuboCop
|
|
13
13
|
lambda do |corrector|
|
14
14
|
str = node.str_content
|
15
15
|
if style == :single_quotes
|
16
|
-
corrector.replace(node
|
16
|
+
corrector.replace(node, to_string_literal(str))
|
17
17
|
else
|
18
|
-
corrector.replace(node
|
18
|
+
corrector.replace(node, str.inspect)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -68,9 +68,7 @@ module RuboCop
|
|
68
68
|
gem_name(current),
|
69
69
|
gem_name(previous)
|
70
70
|
)
|
71
|
-
unless get_dependency_name(previous) == get_dependency_name(current)
|
72
|
-
next
|
73
|
-
end
|
71
|
+
next unless get_dependency_name(previous) == get_dependency_name(current)
|
74
72
|
|
75
73
|
register_offense(previous, current)
|
76
74
|
end
|
@@ -58,7 +58,7 @@ module RuboCop
|
|
58
58
|
# TODO: Implement the cop in here.
|
59
59
|
#
|
60
60
|
# In many cases, you can use a node matcher for matching node pattern.
|
61
|
-
# See https://github.com/rubocop-hq/rubocop/blob/master/lib/rubocop/node_pattern.rb
|
61
|
+
# See https://github.com/rubocop-hq/rubocop-ast/blob/master/lib/rubocop/node_pattern.rb
|
62
62
|
#
|
63
63
|
# For example
|
64
64
|
MSG = 'Use `#good_method` instead of `#bad_method`.'
|
@@ -132,11 +132,12 @@ module RuboCop
|
|
132
132
|
).inject
|
133
133
|
end
|
134
134
|
|
135
|
-
def inject_config(config_file_path: 'config/default.yml'
|
135
|
+
def inject_config(config_file_path: 'config/default.yml',
|
136
|
+
version_added: bump_minor_version)
|
136
137
|
injector =
|
137
138
|
ConfigurationInjector.new(configuration_file_path: config_file_path,
|
138
139
|
badge: badge,
|
139
|
-
version_added:
|
140
|
+
version_added: version_added)
|
140
141
|
|
141
142
|
injector.inject do
|
142
143
|
output.puts(format(CONFIGURATION_ADDED_MESSAGE,
|
@@ -10,9 +10,7 @@ module RuboCop
|
|
10
10
|
|
11
11
|
def part_of_ignored_node?(node)
|
12
12
|
ignored_nodes.map(&:loc).any? do |ignored_loc|
|
13
|
-
if ignored_loc.expression.begin_pos > node.source_range.begin_pos
|
14
|
-
next false
|
15
|
-
end
|
13
|
+
next false if ignored_loc.expression.begin_pos > node.source_range.begin_pos
|
16
14
|
|
17
15
|
ignored_end_pos = if ignored_loc.respond_to?(:heredoc_body)
|
18
16
|
ignored_loc.heredoc_end.end_pos
|
@@ -3,10 +3,10 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
# This cop checks how the
|
7
|
-
# are indented in relation to its
|
6
|
+
# This cop checks how the ``when``s of a `case` expression
|
7
|
+
# are indented in relation to its `case` or `end` keyword.
|
8
8
|
#
|
9
|
-
# It will register a separate offense for each misaligned
|
9
|
+
# It will register a separate offense for each misaligned `when`.
|
10
10
|
#
|
11
11
|
# @example
|
12
12
|
# # If Layout/EndAlignment is set to keyword style (default)
|
@@ -8,22 +8,24 @@ module RuboCop
|
|
8
8
|
# `Categories` allows us to map macro names into a category.
|
9
9
|
#
|
10
10
|
# Consider an example of code style that covers the following order:
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
15
|
-
#
|
16
|
-
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
11
|
+
#
|
12
|
+
# * Module inclusion (include, prepend, extend)
|
13
|
+
# * Constants
|
14
|
+
# * Associations (has_one, has_many)
|
15
|
+
# * Public attribute macros (attr_accessor, attr_writer, attr_reader)
|
16
|
+
# * Other macros (validates, validate)
|
17
|
+
# * Public class methods
|
18
|
+
# * Initializer
|
19
|
+
# * Public instance methods
|
20
|
+
# * Protected attribute macros (attr_accessor, attr_writer, attr_reader)
|
21
|
+
# * Protected instance methods
|
22
|
+
# * Private attribute macros (attr_accessor, attr_writer, attr_reader)
|
23
|
+
# * Private instance methods
|
23
24
|
#
|
24
25
|
# You can configure the following order:
|
25
26
|
#
|
26
|
-
#
|
27
|
+
# [source,yaml]
|
28
|
+
# ----
|
27
29
|
# Layout/ClassStructure:
|
28
30
|
# ExpectedOrder:
|
29
31
|
# - module_inclusion
|
@@ -40,13 +42,14 @@ module RuboCop
|
|
40
42
|
# - private_attribute_macros
|
41
43
|
# - private_delegate
|
42
44
|
# - private_methods
|
43
|
-
#
|
45
|
+
# ----
|
44
46
|
#
|
45
47
|
# Instead of putting all literals in the expected order, is also
|
46
48
|
# possible to group categories of macros. Visibility levels are handled
|
47
49
|
# automatically.
|
48
50
|
#
|
49
|
-
#
|
51
|
+
# [source,yaml]
|
52
|
+
# ----
|
50
53
|
# Layout/ClassStructure:
|
51
54
|
# Categories:
|
52
55
|
# association:
|
@@ -63,7 +66,7 @@ module RuboCop
|
|
63
66
|
# - include
|
64
67
|
# - prepend
|
65
68
|
# - extend
|
66
|
-
#
|
69
|
+
# ----
|
67
70
|
#
|
68
71
|
# @example
|
69
72
|
# # bad
|
@@ -23,6 +23,8 @@ module RuboCop
|
|
23
23
|
# do_something
|
24
24
|
# end
|
25
25
|
class ConditionPosition < Cop
|
26
|
+
include RangeHelp
|
27
|
+
|
26
28
|
MSG = 'Place the condition on the same line as `%<keyword>s`.'
|
27
29
|
|
28
30
|
def on_if(node)
|
@@ -34,9 +36,17 @@ module RuboCop
|
|
34
36
|
def on_while(node)
|
35
37
|
check(node)
|
36
38
|
end
|
39
|
+
alias on_until on_while
|
37
40
|
|
38
|
-
def
|
39
|
-
|
41
|
+
def autocorrect(node)
|
42
|
+
lambda do |corrector|
|
43
|
+
range = range_by_whole_lines(
|
44
|
+
node.source_range, include_final_newline: true
|
45
|
+
)
|
46
|
+
|
47
|
+
corrector.insert_after(node.parent.loc.keyword, " #{node.source}")
|
48
|
+
corrector.remove(range)
|
49
|
+
end
|
40
50
|
end
|
41
51
|
|
42
52
|
private
|
@@ -99,9 +99,7 @@ module RuboCop
|
|
99
99
|
lambda do |corrector|
|
100
100
|
line = range_by_whole_lines(node.source_range)
|
101
101
|
|
102
|
-
unless previous_line_empty?(node.first_line)
|
103
|
-
corrector.insert_before(line, "\n")
|
104
|
-
end
|
102
|
+
corrector.insert_before(line, "\n") unless previous_line_empty?(node.first_line)
|
105
103
|
|
106
104
|
correct_next_line_if_denied_style(corrector, node, line)
|
107
105
|
end
|
@@ -120,9 +118,7 @@ module RuboCop
|
|
120
118
|
def correct_next_line_if_denied_style(corrector, node, line)
|
121
119
|
case style
|
122
120
|
when :around
|
123
|
-
unless next_line_empty?(node.last_line)
|
124
|
-
corrector.insert_after(line, "\n")
|
125
|
-
end
|
121
|
+
corrector.insert_after(line, "\n") unless next_line_empty?(node.last_line)
|
126
122
|
when :only_before
|
127
123
|
if next_line_empty?(node.last_line)
|
128
124
|
range = next_empty_line_range(node)
|