rubocop 0.70.0 → 0.75.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 +6 -10
- data/bin/console +1 -0
- data/config/default.yml +91 -494
- data/lib/rubocop.rb +16 -54
- data/lib/rubocop/ast/builder.rb +2 -0
- data/lib/rubocop/ast/node.rb +9 -15
- data/lib/rubocop/ast/node/float_node.rb +12 -0
- data/lib/rubocop/ast/node/int_node.rb +12 -0
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +4 -4
- data/lib/rubocop/ast/node/mixin/numeric_node.rb +21 -0
- data/lib/rubocop/ast/node/resbody_node.rb +1 -6
- data/lib/rubocop/ast/traversal.rb +3 -3
- data/lib/rubocop/cached_data.rb +1 -1
- data/lib/rubocop/comment_config.rb +3 -2
- data/lib/rubocop/config.rb +21 -508
- data/lib/rubocop/config_loader.rb +22 -4
- data/lib/rubocop/config_loader_resolver.rb +2 -8
- data/lib/rubocop/config_obsoletion.rb +213 -0
- data/lib/rubocop/config_validator.rb +239 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +71 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
- data/lib/rubocop/cop/bundler/ordered_gems.rb +1 -1
- data/lib/rubocop/cop/commissioner.rb +3 -9
- data/lib/rubocop/cop/cop.rb +39 -12
- data/lib/rubocop/cop/corrector.rb +2 -3
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +43 -17
- data/lib/rubocop/cop/correctors/empty_line_corrector.rb +2 -2
- data/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +2 -2
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -1
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +1 -1
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +55 -0
- data/lib/rubocop/cop/generator.rb +4 -4
- data/lib/rubocop/cop/generator/configuration_injector.rb +9 -4
- data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +3 -3
- data/lib/rubocop/cop/layout/class_structure.rb +2 -2
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +3 -1
- data/lib/rubocop/cop/layout/extra_spacing.rb +14 -59
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +4 -0
- data/lib/rubocop/cop/layout/indent_assignment.rb +9 -1
- data/lib/rubocop/cop/layout/indent_first_argument.rb +7 -3
- data/lib/rubocop/cop/layout/indent_first_parameter.rb +7 -3
- data/lib/rubocop/cop/layout/indent_heredoc.rb +4 -4
- data/lib/rubocop/cop/layout/indentation_consistency.rb +13 -12
- data/lib/rubocop/cop/layout/indentation_width.rb +28 -10
- data/lib/rubocop/cop/layout/leading_comment_space.rb +28 -0
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +24 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +2 -0
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +18 -4
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +5 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +42 -23
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +21 -2
- data/lib/rubocop/cop/layout/space_inside_string_interpolation.rb +24 -40
- data/lib/rubocop/cop/layout/tab.rb +10 -22
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +17 -4
- data/lib/rubocop/cop/lint/big_decimal_new.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +4 -6
- data/lib/rubocop/cop/lint/duplicate_methods.rb +3 -3
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +4 -4
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +57 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +11 -37
- 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/literal_in_interpolation.rb +7 -8
- data/lib/rubocop/cop/lint/multiple_compare.rb +1 -1
- data/lib/rubocop/cop/lint/nested_method_definition.rb +3 -3
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +1 -1
- data/lib/rubocop/cop/lint/number_conversion.rb +4 -4
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_index.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_with_object.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +5 -5
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +1 -1
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +91 -0
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +6 -6
- data/lib/rubocop/cop/lint/unified_integer.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_cop_disable_directive.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_require_statement.rb +1 -1
- data/lib/rubocop/cop/lint/unneeded_splat_expansion.rb +7 -2
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +2 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +6 -6
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/message_annotator.rb +16 -7
- data/lib/rubocop/cop/metrics/class_length.rb +1 -1
- data/lib/rubocop/cop/metrics/line_length.rb +6 -0
- data/lib/rubocop/cop/metrics/module_length.rb +1 -1
- data/lib/rubocop/cop/metrics/parameter_lists.rb +1 -1
- data/lib/rubocop/cop/migration/department_name.rb +44 -0
- data/lib/rubocop/cop/mixin/alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/def_node.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +0 -2
- data/lib/rubocop/cop/mixin/empty_parameter.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +4 -4
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +1 -1
- data/lib/rubocop/cop/mixin/hash_alignment.rb +4 -0
- data/lib/rubocop/cop/mixin/interpolation.rb +27 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -3
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +87 -0
- data/lib/rubocop/cop/mixin/safe_mode.rb +2 -0
- data/lib/rubocop/cop/mixin/surrounding_space.rb +7 -5
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_name.rb +12 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +20 -22
- data/lib/rubocop/cop/naming/variable_name.rb +1 -0
- data/lib/rubocop/cop/offense.rb +18 -7
- data/lib/rubocop/cop/registry.rb +22 -1
- data/lib/rubocop/cop/security/eval.rb +1 -1
- data/lib/rubocop/cop/security/json_load.rb +1 -1
- data/lib/rubocop/cop/security/marshal_load.rb +1 -1
- data/lib/rubocop/cop/security/open.rb +1 -1
- data/lib/rubocop/cop/security/yaml_load.rb +1 -1
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +1 -0
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/block_delimiters.rb +2 -1
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +29 -10
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +16 -30
- data/lib/rubocop/cop/style/conditional_assignment.rb +8 -9
- data/lib/rubocop/cop/style/constant_visibility.rb +14 -3
- data/lib/rubocop/cop/style/date_time.rb +3 -3
- data/lib/rubocop/cop/style/dir.rb +1 -1
- data/lib/rubocop/cop/style/documentation_method.rb +1 -1
- data/lib/rubocop/cop/style/double_cop_disable_directive.rb +55 -0
- data/lib/rubocop/cop/style/each_for_simple_loop.rb +1 -1
- data/lib/rubocop/cop/style/each_with_object.rb +1 -1
- data/lib/rubocop/cop/style/eval_with_location.rb +2 -2
- 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/float_division.rb +94 -0
- data/lib/rubocop/cop/style/format_string.rb +13 -9
- data/lib/rubocop/cop/style/format_string_token.rb +10 -40
- data/lib/rubocop/cop/style/frozen_string_literal_comment.rb +18 -33
- data/lib/rubocop/cop/style/guard_clause.rb +39 -10
- data/lib/rubocop/cop/style/hash_syntax.rb +2 -2
- data/lib/rubocop/cop/style/if_inside_else.rb +42 -0
- data/lib/rubocop/cop/style/if_unless_modifier.rb +51 -15
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +2 -2
- data/lib/rubocop/cop/style/lambda.rb +0 -2
- data/lib/rubocop/cop/style/method_call_with_args_parentheses.rb +12 -6
- data/lib/rubocop/cop/style/min_max.rb +1 -1
- data/lib/rubocop/cop/style/mixin_usage.rb +12 -2
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_when_then.rb +55 -0
- data/lib/rubocop/cop/style/multiple_comparison.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +3 -3
- data/lib/rubocop/cop/style/nested_modifier.rb +18 -2
- data/lib/rubocop/cop/style/numeric_predicate.rb +3 -3
- data/lib/rubocop/cop/style/option_hash.rb +1 -1
- data/lib/rubocop/cop/style/or_assignment.rb +8 -3
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +15 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +6 -6
- data/lib/rubocop/cop/style/redundant_conditional.rb +2 -2
- data/lib/rubocop/cop/style/redundant_exception.rb +2 -2
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +15 -6
- data/lib/rubocop/cop/style/redundant_self.rb +18 -1
- data/lib/rubocop/cop/style/redundant_sort_by.rb +1 -1
- data/lib/rubocop/cop/style/rescue_modifier.rb +24 -0
- data/lib/rubocop/cop/style/rescue_standard_error.rb +2 -2
- data/lib/rubocop/cop/style/return_nil.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +11 -2
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +8 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/string_hash_keys.rb +2 -2
- data/lib/rubocop/cop/style/strip.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +3 -3
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +32 -3
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +4 -0
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +4 -6
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unneeded_sort.rb +1 -1
- data/lib/rubocop/cop/style/unpack_first.rb +1 -1
- data/lib/rubocop/cop/style/variable_interpolation.rb +6 -16
- data/lib/rubocop/cop/style/word_array.rb +2 -2
- data/lib/rubocop/cop/style/zero_length_predicate.rb +6 -6
- data/lib/rubocop/cop/team.rb +15 -14
- data/lib/rubocop/cop/utils/format_string.rb +128 -0
- data/lib/rubocop/cop/variable_force/variable.rb +15 -2
- data/lib/rubocop/core_ext/string.rb +0 -24
- data/lib/rubocop/error.rb +23 -0
- data/lib/rubocop/formatter/emacs_style_formatter.rb +8 -5
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/pacman_formatter.rb +80 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +9 -1
- data/lib/rubocop/formatter/tap_formatter.rb +9 -1
- data/lib/rubocop/magic_comment.rb +4 -0
- data/lib/rubocop/node_pattern.rb +86 -7
- data/lib/rubocop/options.rb +18 -2
- data/lib/rubocop/path_util.rb +1 -1
- data/lib/rubocop/processed_source.rb +9 -1
- data/lib/rubocop/rspec/cop_helper.rb +0 -1
- data/lib/rubocop/rspec/expect_offense.rb +4 -1
- data/lib/rubocop/rspec/shared_contexts.rb +12 -17
- data/lib/rubocop/rspec/support.rb +0 -1
- data/lib/rubocop/runner.rb +20 -15
- data/lib/rubocop/target_finder.rb +6 -4
- data/lib/rubocop/version.rb +1 -1
- data/lib/rubocop/yaml_duplication_checker.rb +8 -2
- metadata +16 -70
- data/lib/rubocop/cop/mixin/ignored_method_patterns.rb +0 -19
- data/lib/rubocop/cop/mixin/target_rails_version.rb +0 -16
- data/lib/rubocop/cop/rails/action_filter.rb +0 -117
- data/lib/rubocop/cop/rails/active_record_aliases.rb +0 -48
- data/lib/rubocop/cop/rails/active_record_override.rb +0 -82
- data/lib/rubocop/cop/rails/active_support_aliases.rb +0 -69
- data/lib/rubocop/cop/rails/application_job.rb +0 -40
- data/lib/rubocop/cop/rails/application_record.rb +0 -40
- data/lib/rubocop/cop/rails/assert_not.rb +0 -44
- data/lib/rubocop/cop/rails/belongs_to.rb +0 -102
- data/lib/rubocop/cop/rails/blank.rb +0 -164
- data/lib/rubocop/cop/rails/bulk_change_table.rb +0 -289
- data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +0 -91
- data/lib/rubocop/cop/rails/date.rb +0 -161
- data/lib/rubocop/cop/rails/delegate.rb +0 -132
- data/lib/rubocop/cop/rails/delegate_allow_blank.rb +0 -37
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +0 -91
- data/lib/rubocop/cop/rails/enum_uniqueness.rb +0 -45
- data/lib/rubocop/cop/rails/environment_comparison.rb +0 -68
- data/lib/rubocop/cop/rails/exit.rb +0 -67
- data/lib/rubocop/cop/rails/file_path.rb +0 -108
- data/lib/rubocop/cop/rails/find_by.rb +0 -55
- data/lib/rubocop/cop/rails/find_each.rb +0 -51
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +0 -25
- data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +0 -106
- data/lib/rubocop/cop/rails/http_positional_arguments.rb +0 -117
- data/lib/rubocop/cop/rails/http_status.rb +0 -179
- data/lib/rubocop/cop/rails/ignored_skip_action_filter_option.rb +0 -94
- data/lib/rubocop/cop/rails/inverse_of.rb +0 -246
- data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +0 -175
- data/lib/rubocop/cop/rails/link_to_blank.rb +0 -98
- data/lib/rubocop/cop/rails/not_null_column.rb +0 -67
- data/lib/rubocop/cop/rails/output.rb +0 -49
- data/lib/rubocop/cop/rails/output_safety.rb +0 -99
- data/lib/rubocop/cop/rails/pluralization_grammar.rb +0 -107
- data/lib/rubocop/cop/rails/presence.rb +0 -124
- data/lib/rubocop/cop/rails/present.rb +0 -153
- data/lib/rubocop/cop/rails/read_write_attribute.rb +0 -74
- data/lib/rubocop/cop/rails/redundant_allow_nil.rb +0 -111
- data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +0 -136
- data/lib/rubocop/cop/rails/reflection_class_name.rb +0 -37
- data/lib/rubocop/cop/rails/refute_methods.rb +0 -76
- data/lib/rubocop/cop/rails/relative_date_constant.rb +0 -93
- data/lib/rubocop/cop/rails/request_referer.rb +0 -56
- data/lib/rubocop/cop/rails/reversible_migration.rb +0 -286
- data/lib/rubocop/cop/rails/safe_navigation.rb +0 -87
- data/lib/rubocop/cop/rails/save_bang.rb +0 -316
- data/lib/rubocop/cop/rails/scope_args.rb +0 -29
- data/lib/rubocop/cop/rails/skips_model_validations.rb +0 -87
- data/lib/rubocop/cop/rails/time_zone.rb +0 -238
- data/lib/rubocop/cop/rails/uniq_before_pluck.rb +0 -105
- data/lib/rubocop/cop/rails/unknown_env.rb +0 -63
- data/lib/rubocop/cop/rails/validation.rb +0 -109
- data/lib/rubocop/rspec/shared_examples.rb +0 -59
@@ -5,12 +5,13 @@ module RuboCop
|
|
5
5
|
module Layout
|
6
6
|
# This cop checks for inconsistent indentation.
|
7
7
|
#
|
8
|
-
# The difference between `
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
8
|
+
# The difference between `indented_internal_methods` and `normal` is
|
9
|
+
# that the `indented_internal_methods` style prescribes that in
|
10
|
+
# classes and modules the `protected` and `private` modifier keywords
|
11
|
+
# shall be indented the same as public methods and that protected and
|
12
|
+
# private members shall be indented one step more than the modifiers.
|
13
|
+
# Other than that, both styles mean that entities on the same logical
|
14
|
+
# depth shall have the same indentation.
|
14
15
|
#
|
15
16
|
# @example EnforcedStyle: normal (default)
|
16
17
|
# # bad
|
@@ -65,7 +66,7 @@ module RuboCop
|
|
65
66
|
# end
|
66
67
|
# end
|
67
68
|
#
|
68
|
-
# @example EnforcedStyle:
|
69
|
+
# @example EnforcedStyle: indented_internal_methods
|
69
70
|
# # bad
|
70
71
|
# class A
|
71
72
|
# def test
|
@@ -166,8 +167,8 @@ module RuboCop
|
|
166
167
|
end
|
167
168
|
|
168
169
|
def check(node)
|
169
|
-
if style == :
|
170
|
-
|
170
|
+
if style == :indented_internal_methods
|
171
|
+
check_indented_internal_methods_style(node)
|
171
172
|
else
|
172
173
|
check_normal_style(node)
|
173
174
|
end
|
@@ -180,13 +181,13 @@ module RuboCop
|
|
180
181
|
)
|
181
182
|
end
|
182
183
|
|
183
|
-
def
|
184
|
+
def check_indented_internal_methods_style(node)
|
184
185
|
children_to_check = [[]]
|
185
186
|
node.children.each do |child|
|
186
187
|
# Modifier nodes have special indentation and will be checked by
|
187
188
|
# the AccessModifierIndentation cop. This cop uses them as dividers
|
188
|
-
# in
|
189
|
-
# section delimited by a modifier node.
|
189
|
+
# in indented_internal_methods mode. Then consistency is checked
|
190
|
+
# only within each section delimited by a modifier node.
|
190
191
|
if bare_access_modifier?(child)
|
191
192
|
children_to_check << []
|
192
193
|
else
|
@@ -52,7 +52,7 @@ module RuboCop
|
|
52
52
|
MSG = 'Use %<configured_indentation_width>d (not %<indentation>d) ' \
|
53
53
|
'spaces for%<name>s indentation.'
|
54
54
|
|
55
|
-
def_node_matcher :access_modifier?,
|
55
|
+
def_node_matcher :access_modifier?, <<~PATTERN
|
56
56
|
[(send ...) access_modifier?]
|
57
57
|
PATTERN
|
58
58
|
|
@@ -83,7 +83,7 @@ module RuboCop
|
|
83
83
|
|
84
84
|
check_indentation(end_loc, node.body)
|
85
85
|
|
86
|
-
return unless
|
86
|
+
return unless indented_internal_methods_style?
|
87
87
|
|
88
88
|
check_members(end_loc, [node.body])
|
89
89
|
end
|
@@ -155,14 +155,10 @@ module RuboCop
|
|
155
155
|
|
156
156
|
return unless members.any? && members.first.begin_type?
|
157
157
|
|
158
|
-
if indentation_consistency_style == '
|
159
|
-
|
158
|
+
if indentation_consistency_style == 'indented_internal_methods'
|
159
|
+
check_members_for_indented_internal_methods_style(members)
|
160
160
|
else
|
161
|
-
members
|
162
|
-
next if member.send_type? && member.access_modifier?
|
163
|
-
|
164
|
-
check_indentation(base, member)
|
165
|
-
end
|
161
|
+
check_members_for_normal_style(base, members)
|
166
162
|
end
|
167
163
|
end
|
168
164
|
|
@@ -170,19 +166,29 @@ module RuboCop
|
|
170
166
|
return unless member
|
171
167
|
|
172
168
|
if access_modifier?(member.children.first)
|
169
|
+
return if access_modifier_indentation_style == 'outdent'
|
170
|
+
|
173
171
|
member.children.first
|
174
172
|
else
|
175
173
|
member
|
176
174
|
end
|
177
175
|
end
|
178
176
|
|
179
|
-
def
|
177
|
+
def check_members_for_indented_internal_methods_style(members)
|
180
178
|
each_member(members) do |member, previous_modifier|
|
181
179
|
check_indentation(previous_modifier, member,
|
182
180
|
indentation_consistency_style)
|
183
181
|
end
|
184
182
|
end
|
185
183
|
|
184
|
+
def check_members_for_normal_style(base, members)
|
185
|
+
members.first.children.each do |member|
|
186
|
+
next if member.send_type? && member.access_modifier?
|
187
|
+
|
188
|
+
check_indentation(base, member)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
186
192
|
def each_member(members)
|
187
193
|
previous_modifier = nil
|
188
194
|
members.first.children.each do |member|
|
@@ -195,6 +201,18 @@ module RuboCop
|
|
195
201
|
end
|
196
202
|
end
|
197
203
|
|
204
|
+
def indented_internal_methods_style?
|
205
|
+
indentation_consistency_style == 'indented_internal_methods'
|
206
|
+
end
|
207
|
+
|
208
|
+
def special_modifier?(node)
|
209
|
+
node.bare_access_modifier? && SPECIAL_MODIFIERS.include?(node.source)
|
210
|
+
end
|
211
|
+
|
212
|
+
def access_modifier_indentation_style
|
213
|
+
config.for_cop('Layout/AccessModifierIndentation')['EnforcedStyle']
|
214
|
+
end
|
215
|
+
|
198
216
|
def indentation_consistency_style
|
199
217
|
config.for_cop('Layout/IndentationConsistency')['EnforcedStyle']
|
200
218
|
end
|
@@ -16,6 +16,25 @@ module RuboCop
|
|
16
16
|
#
|
17
17
|
# # good
|
18
18
|
# # Some comment
|
19
|
+
#
|
20
|
+
# @example AllowDoxygenCommentStyle: false (default)
|
21
|
+
#
|
22
|
+
# # bad
|
23
|
+
#
|
24
|
+
# #**
|
25
|
+
# # Some comment
|
26
|
+
# # Another line of comment
|
27
|
+
# #*
|
28
|
+
#
|
29
|
+
# @example AllowDoxygenCommentStyle: true
|
30
|
+
#
|
31
|
+
# # good
|
32
|
+
#
|
33
|
+
# #**
|
34
|
+
# # Some comment
|
35
|
+
# # Another line of comment
|
36
|
+
# #*
|
37
|
+
#
|
19
38
|
class LeadingCommentSpace < Cop
|
20
39
|
include RangeHelp
|
21
40
|
|
@@ -25,6 +44,7 @@ module RuboCop
|
|
25
44
|
processed_source.each_comment do |comment|
|
26
45
|
next unless comment.text =~ /\A#+[^#\s=:+-]/
|
27
46
|
next if comment.loc.line == 1 && allowed_on_first_line?(comment)
|
47
|
+
next if allow_doxygen_comment? && doxygen_comment_style?(comment)
|
28
48
|
|
29
49
|
add_offense(comment)
|
30
50
|
end
|
@@ -54,6 +74,14 @@ module RuboCop
|
|
54
74
|
def rackup_config_file?
|
55
75
|
File.basename(processed_source.file_path).eql?('config.ru')
|
56
76
|
end
|
77
|
+
|
78
|
+
def allow_doxygen_comment?
|
79
|
+
cop_config['AllowDoxygenCommentStyle']
|
80
|
+
end
|
81
|
+
|
82
|
+
def doxygen_comment_style?(comment)
|
83
|
+
comment.text.start_with?('#*')
|
84
|
+
end
|
57
85
|
end
|
58
86
|
end
|
59
87
|
end
|
@@ -5,7 +5,9 @@ module RuboCop
|
|
5
5
|
module Layout
|
6
6
|
# This cop checks whether the multiline do end blocks have a newline
|
7
7
|
# after the start of the block. Additionally, it checks whether the block
|
8
|
-
# arguments, if any, are on the same line as the start of the
|
8
|
+
# arguments, if any, are on the same line as the start of the
|
9
|
+
# block. Putting block arguments on separate lines, because the whole
|
10
|
+
# line would otherwise be too long, is accepted.
|
9
11
|
#
|
10
12
|
# @example
|
11
13
|
# # bad
|
@@ -35,6 +37,17 @@ module RuboCop
|
|
35
37
|
# foo(i)
|
36
38
|
# bar(i)
|
37
39
|
# }
|
40
|
+
#
|
41
|
+
# # good
|
42
|
+
# blah { |
|
43
|
+
# long_list,
|
44
|
+
# of_parameters,
|
45
|
+
# that_would_not,
|
46
|
+
# fit_on_one_line
|
47
|
+
# |
|
48
|
+
# foo(i)
|
49
|
+
# bar(i)
|
50
|
+
# }
|
38
51
|
class MultilineBlockLayout < Cop
|
39
52
|
include RangeHelp
|
40
53
|
|
@@ -42,11 +55,13 @@ module RuboCop
|
|
42
55
|
'the block start.'
|
43
56
|
ARG_MSG = 'Block argument expression is not on the same line as the ' \
|
44
57
|
'block start.'
|
58
|
+
PIPE_SIZE = '|'.length
|
45
59
|
|
46
60
|
def on_block(node)
|
47
61
|
return if node.single_line?
|
48
62
|
|
49
|
-
unless args_on_beginning_line?(node)
|
63
|
+
unless args_on_beginning_line?(node) ||
|
64
|
+
line_break_necessary_in_args?(node)
|
50
65
|
add_offense_for_expression(node, node.arguments, ARG_MSG)
|
51
66
|
end
|
52
67
|
|
@@ -79,6 +94,13 @@ module RuboCop
|
|
79
94
|
node.loc.begin.line == node.arguments.loc.last_line
|
80
95
|
end
|
81
96
|
|
97
|
+
def line_break_necessary_in_args?(node)
|
98
|
+
needed_length = node.source_range.column +
|
99
|
+
node.source.lines.first.length +
|
100
|
+
block_arg_string(node.arguments).length + PIPE_SIZE
|
101
|
+
needed_length > max_line_length
|
102
|
+
end
|
103
|
+
|
82
104
|
def add_offense_for_expression(node, expr, msg)
|
83
105
|
expression = expr.source_range
|
84
106
|
range = range_between(expression.begin_pos, expression.end_pos)
|
@@ -30,6 +30,8 @@ module RuboCop
|
|
30
30
|
ANCESTOR_TYPES = %i[kwbegin def defs class module].freeze
|
31
31
|
RUBY_2_5_ANCESTOR_TYPES = (ANCESTOR_TYPES + %i[block]).freeze
|
32
32
|
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS = %i[def defs].freeze
|
33
|
+
ALTERNATIVE_ACCESS_MODIFIERS = %i[public_class_method
|
34
|
+
private_class_method].freeze
|
33
35
|
|
34
36
|
def on_resbody(node)
|
35
37
|
check(node) unless modifier?(node)
|
@@ -99,8 +101,12 @@ module RuboCop
|
|
99
101
|
case node.type
|
100
102
|
when :block, :kwbegin
|
101
103
|
node.loc.begin
|
102
|
-
when :def, :defs, :class, :module
|
104
|
+
when :def, :defs, :class, :module,
|
105
|
+
:lvasgn, :ivasgn, :cvasgn, :gvasgn, :casgn
|
103
106
|
node.loc.name
|
107
|
+
when :masgn
|
108
|
+
mlhs_node, = *node
|
109
|
+
mlhs_node.loc.expression
|
104
110
|
else
|
105
111
|
# It is a wrapper with access modifier.
|
106
112
|
node.child_nodes.first.loc.name
|
@@ -150,9 +156,7 @@ module RuboCop
|
|
150
156
|
ANCESTOR_TYPES_WITH_ACCESS_MODIFIERS.include?(node.type)
|
151
157
|
|
152
158
|
access_modifier_node = node.ancestors.first
|
153
|
-
return nil unless
|
154
|
-
access_modifier_node.respond_to?(:access_modifier?) &&
|
155
|
-
access_modifier_node.access_modifier?
|
159
|
+
return nil unless access_modifier?(access_modifier_node)
|
156
160
|
|
157
161
|
access_modifier_node
|
158
162
|
end
|
@@ -169,6 +173,16 @@ module RuboCop
|
|
169
173
|
|
170
174
|
range_between(begin_pos - current_column, begin_pos)
|
171
175
|
end
|
176
|
+
|
177
|
+
def access_modifier?(node)
|
178
|
+
return true if node.respond_to?(:access_modifier?) &&
|
179
|
+
node.access_modifier?
|
180
|
+
|
181
|
+
return true if node.respond_to?(:method_name) &&
|
182
|
+
ALTERNATIVE_ACCESS_MODIFIERS.include?(node.method_name)
|
183
|
+
|
184
|
+
false
|
185
|
+
end
|
172
186
|
end
|
173
187
|
end
|
174
188
|
end
|
@@ -3,7 +3,9 @@
|
|
3
3
|
module RuboCop
|
4
4
|
module Cop
|
5
5
|
module Layout
|
6
|
-
# Checks the spacing inside and after block parameters pipes.
|
6
|
+
# Checks the spacing inside and after block parameters pipes. Line breaks
|
7
|
+
# inside parameter pipes are checked by `Layout/MultilineBlockLayout` and
|
8
|
+
# not by this cop.
|
7
9
|
#
|
8
10
|
# @example EnforcedStyleInsidePipes: no_space (default)
|
9
11
|
# # bad
|
@@ -156,6 +158,8 @@ module RuboCop
|
|
156
158
|
return if space_begin_pos >= space_end_pos
|
157
159
|
|
158
160
|
range = range_between(space_begin_pos, space_end_pos)
|
161
|
+
return if range.source.include?("\n")
|
162
|
+
|
159
163
|
add_offense(range, location: range,
|
160
164
|
message: "#{msg} block parameter detected.")
|
161
165
|
end
|
@@ -34,14 +34,14 @@ module RuboCop
|
|
34
34
|
|
35
35
|
return if hash_table_style? && !node.parent.pairs_on_same_line?
|
36
36
|
|
37
|
-
check_operator(node.loc.operator, node.source_range)
|
37
|
+
check_operator(:pair, node.loc.operator, node.source_range)
|
38
38
|
end
|
39
39
|
|
40
40
|
def on_if(node)
|
41
41
|
return unless node.ternary?
|
42
42
|
|
43
|
-
check_operator(node.loc.question, node.if_branch.source_range)
|
44
|
-
check_operator(node.loc.colon, node.else_branch.source_range)
|
43
|
+
check_operator(:if, node.loc.question, node.if_branch.source_range)
|
44
|
+
check_operator(:if, node.loc.colon, node.else_branch.source_range)
|
45
45
|
end
|
46
46
|
|
47
47
|
def on_resbody(node)
|
@@ -49,23 +49,33 @@ module RuboCop
|
|
49
49
|
|
50
50
|
_, variable, = *node
|
51
51
|
|
52
|
-
check_operator(node.loc.assoc, variable.source_range)
|
52
|
+
check_operator(:resbody, node.loc.assoc, variable.source_range)
|
53
53
|
end
|
54
54
|
|
55
55
|
def on_send(node)
|
56
56
|
if node.setter_method?
|
57
57
|
on_special_asgn(node)
|
58
58
|
elsif regular_operator?(node)
|
59
|
-
check_operator(
|
59
|
+
check_operator(:send,
|
60
|
+
node.loc.selector,
|
61
|
+
node.first_argument.source_range)
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
65
|
+
def on_assignment(node)
|
66
|
+
_, rhs, = *node
|
67
|
+
|
68
|
+
return unless rhs
|
69
|
+
|
70
|
+
check_operator(:assignment, node.loc.operator, rhs.source_range)
|
71
|
+
end
|
72
|
+
|
63
73
|
def on_binary(node)
|
64
74
|
_, rhs, = *node
|
65
75
|
|
66
76
|
return unless rhs
|
67
77
|
|
68
|
-
check_operator(node.loc.operator, rhs.source_range)
|
78
|
+
check_operator(:binary, node.loc.operator, rhs.source_range)
|
69
79
|
end
|
70
80
|
|
71
81
|
def on_special_asgn(node)
|
@@ -73,20 +83,20 @@ module RuboCop
|
|
73
83
|
|
74
84
|
return unless right
|
75
85
|
|
76
|
-
check_operator(node.loc.operator, right.source_range)
|
86
|
+
check_operator(:special_asgn, node.loc.operator, right.source_range)
|
77
87
|
end
|
78
88
|
|
79
89
|
alias on_or on_binary
|
80
90
|
alias on_and on_binary
|
81
|
-
alias on_lvasgn
|
82
|
-
alias on_masgn
|
91
|
+
alias on_lvasgn on_assignment
|
92
|
+
alias on_masgn on_assignment
|
83
93
|
alias on_casgn on_special_asgn
|
84
|
-
alias on_ivasgn
|
85
|
-
alias on_cvasgn
|
86
|
-
alias on_gvasgn
|
94
|
+
alias on_ivasgn on_assignment
|
95
|
+
alias on_cvasgn on_assignment
|
96
|
+
alias on_gvasgn on_assignment
|
87
97
|
alias on_class on_binary
|
88
|
-
alias on_or_asgn
|
89
|
-
alias on_and_asgn
|
98
|
+
alias on_or_asgn on_assignment
|
99
|
+
alias on_and_asgn on_assignment
|
90
100
|
alias on_op_asgn on_special_asgn
|
91
101
|
|
92
102
|
def autocorrect(range)
|
@@ -113,35 +123,44 @@ module RuboCop
|
|
113
123
|
!IRREGULAR_METHODS.include?(send_node.method_name)
|
114
124
|
end
|
115
125
|
|
116
|
-
def check_operator(operator, right_operand)
|
126
|
+
def check_operator(type, operator, right_operand)
|
117
127
|
with_space = range_with_surrounding_space(range: operator)
|
118
128
|
return if with_space.source.start_with?("\n")
|
119
129
|
|
120
|
-
offense(operator, with_space, right_operand) do |msg|
|
130
|
+
offense(type, operator, with_space, right_operand) do |msg|
|
121
131
|
add_offense(with_space, location: operator, message: msg)
|
122
132
|
end
|
123
133
|
end
|
124
134
|
|
125
|
-
def offense(operator, with_space, right_operand)
|
126
|
-
msg = offense_message(operator, with_space, right_operand)
|
135
|
+
def offense(type, operator, with_space, right_operand)
|
136
|
+
msg = offense_message(type, operator, with_space, right_operand)
|
127
137
|
yield msg if msg
|
128
138
|
end
|
129
139
|
|
130
|
-
def offense_message(operator, with_space, right_operand)
|
140
|
+
def offense_message(type, operator, with_space, right_operand)
|
131
141
|
if operator.is?('**')
|
132
142
|
'Space around operator `**` detected.' unless with_space.is?('**')
|
133
143
|
elsif with_space.source !~ /^\s.*\s$/
|
134
144
|
"Surrounding space missing for operator `#{operator.source}`."
|
135
|
-
elsif excess_leading_space?(operator, with_space) ||
|
145
|
+
elsif excess_leading_space?(type, operator, with_space) ||
|
136
146
|
excess_trailing_space?(right_operand, with_space)
|
137
147
|
"Operator `#{operator.source}` should be surrounded " \
|
138
148
|
'by a single space.'
|
139
149
|
end
|
140
150
|
end
|
141
151
|
|
142
|
-
def excess_leading_space?(operator, with_space)
|
143
|
-
|
144
|
-
|
152
|
+
def excess_leading_space?(type, operator, with_space)
|
153
|
+
return false unless allow_for_alignment?
|
154
|
+
return false unless with_space.source.start_with?(EXCESSIVE_SPACE)
|
155
|
+
|
156
|
+
return !aligned_with_operator?(operator) unless type == :assignment
|
157
|
+
|
158
|
+
token = Token.new(operator, nil, operator.source)
|
159
|
+
align_preceding = aligned_with_preceding_assignment(token)
|
160
|
+
|
161
|
+
return align_preceding == :no unless align_preceding == :none
|
162
|
+
|
163
|
+
aligned_with_subsequent_assignment(token) != :yes
|
145
164
|
end
|
146
165
|
|
147
166
|
def excess_trailing_space?(right_operand, with_space)
|