rubocop 0.80.1 → 0.85.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 +4 -4
- data/config/default.yml +202 -49
- data/lib/rubocop.rb +20 -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 +2 -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 +14 -6
- 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/array_alignment.rb +53 -10
- data/lib/rubocop/cop/layout/block_end_newline.rb +5 -3
- 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/else_alignment.rb +8 -0
- 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 +20 -103
- 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_method_call_indentation.rb +1 -1
- 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 +12 -0
- 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 +2 -4
- 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 +7 -5
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +62 -0
- data/lib/rubocop/cop/lint/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +2 -2
- 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 +75 -0
- 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/safe_navigation_chain.rb +1 -1
- data/lib/rubocop/cop/lint/struct_new_override.rb +58 -0
- data/lib/rubocop/cop/lint/suppressed_exception.rb +23 -26
- 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/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 +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 +22 -9
- 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/end_keyword_alignment.rb +6 -1
- 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/method_complexity.rb +5 -0
- 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 +26 -0
- 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 +12 -7
- data/lib/rubocop/cop/severity.rb +1 -3
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +26 -6
- 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/collection_methods.rb +2 -0
- 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/documentation.rb +43 -5
- 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/end_block.rb +6 -0
- 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 +6 -4
- data/lib/rubocop/cop/style/hash_syntax.rb +19 -12
- data/lib/rubocop/cop/style/hash_transform_keys.rb +6 -2
- data/lib/rubocop/cop/style/hash_transform_values.rb +6 -5
- 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/inverse_methods.rb +1 -1
- 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/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 +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_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/nested_parenthesized_calls.rb +2 -2
- 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 +6 -9
- 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 +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 +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/redundant_sort.rb +2 -2
- 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 +35 -0
- 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 +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 +61 -25
- data/lib/rubocop/cop/util.rb +25 -1
- 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/clang_style_formatter.rb +1 -1
- 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 +27 -6
- data/lib/rubocop/formatter/pacman_formatter.rb +1 -1
- data/lib/rubocop/formatter/tap_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 +46 -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 +50 -77
- data/lib/rubocop/ast/builder.rb +0 -83
- data/lib/rubocop/ast/node.rb +0 -632
- 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 -117
- data/lib/rubocop/ast/node/break_node.rb +0 -17
- 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 -200
- data/lib/rubocop/cop/lint/end_in_method.rb +0 -40
- 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
@@ -0,0 +1,126 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Layout
|
6
|
+
# Checks for a newline after an attribute accessor or a group of them.
|
7
|
+
# `alias` syntax and `alias_method`, `public`, `protected`, and `private` methods are allowed
|
8
|
+
# by default. These are customizable with `AllowAliasSyntax` and `AllowedMethods` options.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# # bad
|
12
|
+
# attr_accessor :foo
|
13
|
+
# def do_something
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# attr_accessor :foo
|
18
|
+
#
|
19
|
+
# def do_something
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# # good
|
23
|
+
# attr_accessor :foo
|
24
|
+
# attr_reader :bar
|
25
|
+
# attr_writer :baz
|
26
|
+
# attr :qux
|
27
|
+
#
|
28
|
+
# def do_something
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# @example AllowAliasSyntax: true (default)
|
32
|
+
# # good
|
33
|
+
# attr_accessor :foo
|
34
|
+
# alias :foo? :foo
|
35
|
+
#
|
36
|
+
# def do_something
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# @example AllowAliasSyntax: false
|
40
|
+
# # bad
|
41
|
+
# attr_accessor :foo
|
42
|
+
# alias :foo? :foo
|
43
|
+
#
|
44
|
+
# def do_something
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# # good
|
48
|
+
# attr_accessor :foo
|
49
|
+
#
|
50
|
+
# alias :foo? :foo
|
51
|
+
#
|
52
|
+
# def do_something
|
53
|
+
# end
|
54
|
+
#
|
55
|
+
# @example AllowedMethods: ['private']
|
56
|
+
# # good
|
57
|
+
# attr_accessor :foo
|
58
|
+
# private :foo
|
59
|
+
#
|
60
|
+
# def do_something
|
61
|
+
# end
|
62
|
+
#
|
63
|
+
class EmptyLinesAroundAttributeAccessor < Cop
|
64
|
+
include RangeHelp
|
65
|
+
|
66
|
+
MSG = 'Add an empty line after attribute accessor.'
|
67
|
+
|
68
|
+
def on_send(node)
|
69
|
+
return unless node.attribute_accessor?
|
70
|
+
return if next_line_empty?(node.last_line)
|
71
|
+
|
72
|
+
next_line_node = next_line_node(node)
|
73
|
+
return unless require_empty_line?(next_line_node)
|
74
|
+
|
75
|
+
add_offense(node)
|
76
|
+
end
|
77
|
+
|
78
|
+
def autocorrect(node)
|
79
|
+
lambda do |corrector|
|
80
|
+
range = range_by_whole_lines(node.source_range)
|
81
|
+
|
82
|
+
corrector.insert_after(range, "\n")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def next_line_empty?(line)
|
89
|
+
processed_source[line].blank?
|
90
|
+
end
|
91
|
+
|
92
|
+
def require_empty_line?(node)
|
93
|
+
return false unless node&.respond_to?(:type)
|
94
|
+
|
95
|
+
!allow_alias?(node) && !attribute_or_allowed_method?(node)
|
96
|
+
end
|
97
|
+
|
98
|
+
def next_line_node(node)
|
99
|
+
node.parent.children[node.sibling_index + 1]
|
100
|
+
end
|
101
|
+
|
102
|
+
def allow_alias?(node)
|
103
|
+
allow_alias_syntax? && node.alias_type?
|
104
|
+
end
|
105
|
+
|
106
|
+
def attribute_or_allowed_method?(node)
|
107
|
+
return false unless node.send_type?
|
108
|
+
|
109
|
+
node.attribute_accessor? || allowed_method?(node.method_name)
|
110
|
+
end
|
111
|
+
|
112
|
+
def allow_alias_syntax?
|
113
|
+
cop_config.fetch('AllowAliasSyntax', true)
|
114
|
+
end
|
115
|
+
|
116
|
+
def allowed_method?(name)
|
117
|
+
allowed_methods.include?(name.to_s)
|
118
|
+
end
|
119
|
+
|
120
|
+
def allowed_methods
|
121
|
+
cop_config.fetch('AllowedMethods', [])
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -75,8 +75,8 @@ module RuboCop
|
|
75
75
|
style
|
76
76
|
end
|
77
77
|
case effective_style
|
78
|
-
when :lf then MSG_DETECTED if line
|
79
|
-
else MSG_MISSING
|
78
|
+
when :lf then MSG_DETECTED if line.end_with?("\r", "\r\n")
|
79
|
+
else MSG_MISSING unless line.end_with?("\r\n")
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
@@ -2,13 +2,12 @@
|
|
2
2
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
|
-
# rubocop:disable Layout/LineLength
|
6
5
|
module Layout
|
7
6
|
# This cop checks the indentation of the first argument in a method call.
|
8
7
|
# Arguments after the first one are checked by Layout/ArgumentAlignment,
|
9
8
|
# not by this cop.
|
10
9
|
#
|
11
|
-
# For indenting the first parameter of method
|
10
|
+
# For indenting the first parameter of method _definitions_, check out
|
12
11
|
# Layout/FirstParameterIndentation.
|
13
12
|
#
|
14
13
|
# @example
|
@@ -143,7 +142,6 @@ module RuboCop
|
|
143
142
|
# second_param
|
144
143
|
#
|
145
144
|
class FirstArgumentIndentation < Cop
|
146
|
-
# rubocop:enable Layout/LineLength
|
147
145
|
include Alignment
|
148
146
|
include ConfigurableEnforcedStyle
|
149
147
|
include RangeHelp
|
@@ -125,21 +125,13 @@ module RuboCop
|
|
125
125
|
|
126
126
|
def check_right_bracket(right_bracket, left_bracket, left_parenthesis)
|
127
127
|
# if the right bracket is on the same line as the last value, accept
|
128
|
-
return if right_bracket.source_line[0...right_bracket.column]
|
128
|
+
return if /\S/.match?(right_bracket.source_line[0...right_bracket.column])
|
129
129
|
|
130
130
|
expected_column = base_column(left_bracket, left_parenthesis)
|
131
131
|
@column_delta = expected_column - right_bracket.column
|
132
132
|
return if @column_delta.zero?
|
133
133
|
|
134
|
-
msg =
|
135
|
-
'Indent the right bracket the same as the left bracket.'
|
136
|
-
elsif style == :special_inside_parentheses && left_parenthesis
|
137
|
-
'Indent the right bracket the same as the first position ' \
|
138
|
-
'after the preceding left parenthesis.'
|
139
|
-
else
|
140
|
-
'Indent the right bracket the same as the start of the line' \
|
141
|
-
' where the left bracket is.'
|
142
|
-
end
|
134
|
+
msg = msg(left_parenthesis)
|
143
135
|
add_offense(right_bracket, location: right_bracket, message: msg)
|
144
136
|
end
|
145
137
|
|
@@ -161,6 +153,18 @@ module RuboCop
|
|
161
153
|
base_description: base_description
|
162
154
|
)
|
163
155
|
end
|
156
|
+
|
157
|
+
def msg(left_parenthesis)
|
158
|
+
if style == :align_brackets
|
159
|
+
'Indent the right bracket the same as the left bracket.'
|
160
|
+
elsif style == :special_inside_parentheses && left_parenthesis
|
161
|
+
'Indent the right bracket the same as the first position ' \
|
162
|
+
'after the preceding left parenthesis.'
|
163
|
+
else
|
164
|
+
'Indent the right bracket the same as the start of the line' \
|
165
|
+
' where the left bracket is.'
|
166
|
+
end
|
167
|
+
end
|
164
168
|
end
|
165
169
|
end
|
166
170
|
end
|
@@ -128,7 +128,7 @@ module RuboCop
|
|
128
128
|
|
129
129
|
def check_right_brace(right_brace, left_brace, left_parenthesis)
|
130
130
|
# if the right brace is on the same line as the last value, accept
|
131
|
-
return if right_brace.source_line[0...right_brace.column]
|
131
|
+
return if /\S/.match?(right_brace.source_line[0...right_brace.column])
|
132
132
|
|
133
133
|
expected_column = base_column(left_brace, left_parenthesis)
|
134
134
|
@column_delta = expected_column - right_brace.column
|
@@ -36,9 +36,7 @@ module RuboCop
|
|
36
36
|
# ...then each key/value pair is treated as a method 'argument'
|
37
37
|
# when determining where line breaks should appear.
|
38
38
|
if (last_arg = args.last)
|
39
|
-
if last_arg.hash_type? && !last_arg.braces?
|
40
|
-
args = args.concat(args.pop.children)
|
41
|
-
end
|
39
|
+
args = args.concat(args.pop.children) if last_arg.hash_type? && !last_arg.braces?
|
42
40
|
end
|
43
41
|
|
44
42
|
check_method_line_break(node, args)
|
@@ -7,9 +7,9 @@ module RuboCop
|
|
7
7
|
# definition. Parameters after the first one are checked by
|
8
8
|
# Layout/ParameterAlignment, not by this cop.
|
9
9
|
#
|
10
|
-
# For indenting the first argument of method
|
10
|
+
# For indenting the first argument of method _calls_, check out
|
11
11
|
# Layout/FirstArgumentIndentation, which supports options related to
|
12
|
-
# nesting that are irrelevant for method
|
12
|
+
# nesting that are irrelevant for method _definitions_.
|
13
13
|
#
|
14
14
|
# @example
|
15
15
|
#
|
@@ -7,16 +7,16 @@ module RuboCop
|
|
7
7
|
# literal are aligned according to configuration. The configuration
|
8
8
|
# options are:
|
9
9
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
10
|
+
# * key (left align keys, one space before hash rockets and values)
|
11
|
+
# * separator (align hash rockets and colons, right align keys)
|
12
|
+
# * table (left align keys, hash rockets, and values)
|
13
13
|
#
|
14
14
|
# The treatment of hashes passed as the last argument to a method call
|
15
15
|
# can also be configured. The options are:
|
16
16
|
#
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
17
|
+
# * always_inspect
|
18
|
+
# * always_ignore
|
19
|
+
# * ignore_implicit (without curly braces)
|
20
20
|
#
|
21
21
|
# Alternatively you can specify multiple allowed styles. That's done by
|
22
22
|
# passing a list of styles to EnforcedStyles.
|
@@ -98,13 +98,9 @@ module RuboCop
|
|
98
98
|
lambda do |corrector|
|
99
99
|
fix_closing_parenthesis(node, corrector)
|
100
100
|
|
101
|
-
if internal_trailing_comma?(node)
|
102
|
-
remove_internal_trailing_comma(node, corrector)
|
103
|
-
end
|
101
|
+
remove_internal_trailing_comma(node, corrector) if internal_trailing_comma?(node)
|
104
102
|
|
105
|
-
if external_trailing_comma?(node)
|
106
|
-
fix_external_trailing_comma(node, corrector)
|
107
|
-
end
|
103
|
+
fix_external_trailing_comma(node, corrector) if external_trailing_comma?(node)
|
108
104
|
end
|
109
105
|
end
|
110
106
|
|
@@ -169,7 +165,7 @@ module RuboCop
|
|
169
165
|
end
|
170
166
|
|
171
167
|
def add_correct_closing_paren(node, corrector)
|
172
|
-
corrector.insert_after(node.arguments.last
|
168
|
+
corrector.insert_after(node.arguments.last, ')')
|
173
169
|
end
|
174
170
|
|
175
171
|
def remove_incorrect_closing_paren(node, corrector)
|
@@ -194,7 +190,7 @@ module RuboCop
|
|
194
190
|
def safe_to_remove_line_containing_closing_paren?(node)
|
195
191
|
last_line = processed_source[node.loc.end.line - 1]
|
196
192
|
# Safe to remove if last line only contains `)`, `,`, and whitespace.
|
197
|
-
last_line.match(/^
|
193
|
+
last_line.match?(/^ *\) {0,20},{0,1} *$/)
|
198
194
|
end
|
199
195
|
|
200
196
|
def incorrect_parenthesis_removal_end(node)
|
@@ -249,7 +245,7 @@ module RuboCop
|
|
249
245
|
def add_correct_external_trailing_comma(node, corrector)
|
250
246
|
return unless external_trailing_comma?(node)
|
251
247
|
|
252
|
-
corrector.insert_after(node.arguments.last
|
248
|
+
corrector.insert_after(node.arguments.last, ',')
|
253
249
|
end
|
254
250
|
|
255
251
|
def remove_incorrect_external_trailing_comma(node, corrector)
|
@@ -5,66 +5,29 @@ module RuboCop
|
|
5
5
|
module Layout
|
6
6
|
# This cop checks the indentation of the here document bodies. The bodies
|
7
7
|
# are indented one step.
|
8
|
-
#
|
9
|
-
#
|
10
|
-
# (e.g. ActiveSupport, Powerpack or Unindent).
|
11
|
-
# Note: When `Layout/LineLength`'s `AllowHeredoc` is false (not default),
|
8
|
+
#
|
9
|
+
# Note: When ``Layout/LineLength``'s `AllowHeredoc` is false (not default),
|
12
10
|
# this cop does not add any offenses for long here documents to
|
13
11
|
# avoid `Layout/LineLength`'s offenses.
|
14
12
|
#
|
15
|
-
# @example
|
13
|
+
# @example
|
16
14
|
# # bad
|
17
15
|
# <<-RUBY
|
18
16
|
# something
|
19
17
|
# RUBY
|
20
18
|
#
|
21
19
|
# # good
|
22
|
-
# # When EnforcedStyle is squiggly, bad code is auto-corrected to the
|
23
|
-
# # following code.
|
24
20
|
# <<~RUBY
|
25
21
|
# something
|
26
22
|
# RUBY
|
27
23
|
#
|
28
|
-
# @example EnforcedStyle: active_support
|
29
|
-
# # good
|
30
|
-
# # When EnforcedStyle is active_support, bad code is auto-corrected to
|
31
|
-
# # the following code.
|
32
|
-
# <<-RUBY.strip_heredoc
|
33
|
-
# something
|
34
|
-
# RUBY
|
35
|
-
#
|
36
|
-
# @example EnforcedStyle: powerpack
|
37
|
-
# # good
|
38
|
-
# # When EnforcedStyle is powerpack, bad code is auto-corrected to
|
39
|
-
# # the following code.
|
40
|
-
# <<-RUBY.strip_indent
|
41
|
-
# something
|
42
|
-
# RUBY
|
43
|
-
#
|
44
|
-
# @example EnforcedStyle: unindent
|
45
|
-
# # good
|
46
|
-
# # When EnforcedStyle is unindent, bad code is auto-corrected to
|
47
|
-
# # the following code.
|
48
|
-
# <<-RUBY.unindent
|
49
|
-
# something
|
50
|
-
# RUBY
|
51
24
|
#
|
52
25
|
class HeredocIndentation < Cop
|
53
26
|
include Heredoc
|
54
|
-
include ConfigurableEnforcedStyle
|
55
27
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
RUBY23_WIDTH_MSG = 'Use %<indentation_width>d spaces for '\
|
60
|
-
'indentation in a heredoc.'
|
61
|
-
LIBRARY_MSG = 'Use %<indentation_width>d spaces for indentation in a ' \
|
62
|
-
'heredoc by using %<method>s.'
|
63
|
-
STRIP_METHODS = {
|
64
|
-
unindent: 'unindent',
|
65
|
-
active_support: 'strip_heredoc',
|
66
|
-
powerpack: 'strip_indent'
|
67
|
-
}.freeze
|
28
|
+
TYPE_MSG = 'Use %<indentation_width>d spaces for indentation in a ' \
|
29
|
+
'heredoc by using `<<~` instead of `%<current_indent_type>s`.'
|
30
|
+
WIDTH_MSG = 'Use %<indentation_width>d spaces for indentation in a heredoc.'
|
68
31
|
|
69
32
|
def on_heredoc(node)
|
70
33
|
body = heredoc_body(node)
|
@@ -85,59 +48,38 @@ module RuboCop
|
|
85
48
|
end
|
86
49
|
|
87
50
|
def autocorrect(node)
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
correct_by_library(node)
|
51
|
+
lambda do |corrector|
|
52
|
+
if heredoc_indent_type(node) == '~'
|
53
|
+
adjust_squiggly(corrector, node)
|
54
|
+
else
|
55
|
+
adjust_minus(corrector, node)
|
56
|
+
end
|
95
57
|
end
|
96
58
|
end
|
97
59
|
|
98
60
|
private
|
99
61
|
|
100
62
|
def message(node)
|
101
|
-
|
102
|
-
when :squiggly
|
103
|
-
current_indent_type = "<<#{heredoc_indent_type(node)}"
|
104
|
-
ruby23_message(indentation_width, current_indent_type)
|
105
|
-
when nil
|
106
|
-
method = "some library(e.g. ActiveSupport's `String#strip_heredoc`)"
|
107
|
-
library_message(indentation_width, method)
|
108
|
-
else
|
109
|
-
method = "`String##{STRIP_METHODS[style]}`"
|
110
|
-
library_message(indentation_width, method)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
def library_message(indentation_width, method)
|
115
|
-
format(
|
116
|
-
LIBRARY_MSG,
|
117
|
-
indentation_width: indentation_width,
|
118
|
-
method: method
|
119
|
-
)
|
120
|
-
end
|
63
|
+
current_indent_type = "<<#{heredoc_indent_type(node)}"
|
121
64
|
|
122
|
-
def ruby23_message(indentation_width, current_indent_type)
|
123
65
|
if current_indent_type == '<<~'
|
124
|
-
|
66
|
+
width_message(indentation_width)
|
125
67
|
else
|
126
|
-
|
68
|
+
type_message(indentation_width, current_indent_type)
|
127
69
|
end
|
128
70
|
end
|
129
71
|
|
130
|
-
def
|
72
|
+
def type_message(indentation_width, current_indent_type)
|
131
73
|
format(
|
132
|
-
|
74
|
+
TYPE_MSG,
|
133
75
|
indentation_width: indentation_width,
|
134
76
|
current_indent_type: current_indent_type
|
135
77
|
)
|
136
78
|
end
|
137
79
|
|
138
|
-
def
|
80
|
+
def width_message(indentation_width)
|
139
81
|
format(
|
140
|
-
|
82
|
+
WIDTH_MSG,
|
141
83
|
indentation_width: indentation_width
|
142
84
|
)
|
143
85
|
end
|
@@ -166,16 +108,6 @@ module RuboCop
|
|
166
108
|
config.for_cop('Layout/LineLength')['Max']
|
167
109
|
end
|
168
110
|
|
169
|
-
def correct_by_squiggly(node)
|
170
|
-
lambda do |corrector|
|
171
|
-
if heredoc_indent_type(node) == '~'
|
172
|
-
adjust_squiggly(corrector, node)
|
173
|
-
else
|
174
|
-
adjust_minus(corrector, node)
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
111
|
def adjust_squiggly(corrector, node)
|
180
112
|
corrector.replace(node.loc.heredoc_body, indented_body(node))
|
181
113
|
corrector.replace(node.loc.heredoc_end, indented_end(node))
|
@@ -184,22 +116,7 @@ module RuboCop
|
|
184
116
|
def adjust_minus(corrector, node)
|
185
117
|
heredoc_beginning = node.loc.expression.source
|
186
118
|
corrected = heredoc_beginning.sub(/<<-?/, '<<~')
|
187
|
-
corrector.replace(node
|
188
|
-
end
|
189
|
-
|
190
|
-
def correct_by_library(node)
|
191
|
-
lambda do |corrector|
|
192
|
-
corrector.replace(node.loc.heredoc_body, indented_body(node))
|
193
|
-
corrected = ".#{STRIP_METHODS[style]}"
|
194
|
-
corrector.insert_after(node.loc.expression, corrected)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
def check_style!
|
199
|
-
return if style
|
200
|
-
|
201
|
-
raise Warning, "Auto-correction does not work for #{cop_name}. " \
|
202
|
-
'Please configure EnforcedStyle.'
|
119
|
+
corrector.replace(node, corrected)
|
203
120
|
end
|
204
121
|
|
205
122
|
def indented_body(node)
|