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
@@ -10,6 +10,7 @@ module RuboCop
|
|
10
10
|
# The maximum length is configurable.
|
11
11
|
# The tab size is configured in the `IndentationWidth`
|
12
12
|
# of the `Layout/Tab` cop.
|
13
|
+
# It also ignores a shebang line by default.
|
13
14
|
#
|
14
15
|
# This cop has some autocorrection capabilities.
|
15
16
|
# It can programmatically shorten certain long lines by
|
@@ -138,9 +139,14 @@ module RuboCop
|
|
138
139
|
|
139
140
|
def ignored_line?(line, line_index)
|
140
141
|
matches_ignored_pattern?(line) ||
|
142
|
+
shebang?(line, line_index) ||
|
141
143
|
heredocs && line_in_permitted_heredoc?(line_index.succ)
|
142
144
|
end
|
143
145
|
|
146
|
+
def shebang?(line, line_index)
|
147
|
+
line_index.zero? && line.start_with?('#!')
|
148
|
+
end
|
149
|
+
|
144
150
|
def register_offense(loc, line, line_index)
|
145
151
|
message = format(MSG, length: line_length(line), max: max)
|
146
152
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module Migration
|
6
|
+
# Check that cop names in rubocop:disable comments are given with
|
7
|
+
# department name.
|
8
|
+
class DepartmentName < Cop
|
9
|
+
include RangeHelp
|
10
|
+
|
11
|
+
MSG = 'Department name is missing.'
|
12
|
+
|
13
|
+
def investigate(processed_source)
|
14
|
+
processed_source.each_comment do |comment|
|
15
|
+
next if comment.text !~ /\A(# *rubocop:((dis|en)able|todo) +)(.*)/
|
16
|
+
|
17
|
+
offset = Regexp.last_match(1).length
|
18
|
+
Regexp.last_match(4).scan(%r{[\w/]+|\W+}) do |name|
|
19
|
+
check_cop_name(name, comment, offset)
|
20
|
+
offset += name.length
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def autocorrect(range)
|
26
|
+
shall_warn = false
|
27
|
+
qualified_cop_name = Cop.registry.qualified_cop_name(range.source,
|
28
|
+
nil, shall_warn)
|
29
|
+
->(corrector) { corrector.replace(range, qualified_cop_name) }
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def check_cop_name(name, comment, offset)
|
35
|
+
return if name !~ /^[A-Z]/ || name =~ %r{/}
|
36
|
+
|
37
|
+
start = comment.location.expression.begin_pos + offset
|
38
|
+
range = range_between(start, start + name.length)
|
39
|
+
add_offense(range, location: range)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -5,12 +5,12 @@ module RuboCop
|
|
5
5
|
# Common functionality for enforcing a specific superclass
|
6
6
|
module EnforceSuperclass
|
7
7
|
def self.included(base)
|
8
|
-
base.def_node_matcher :class_definition,
|
9
|
-
|
8
|
+
base.def_node_matcher :class_definition, <<~PATTERN
|
9
|
+
(class (const _ !:#{base::SUPERCLASS}) #{base::BASE_PATTERN} ...)
|
10
10
|
PATTERN
|
11
11
|
|
12
|
-
base.def_node_matcher :class_new_definition,
|
13
|
-
|
12
|
+
base.def_node_matcher :class_new_definition, <<~PATTERN
|
13
|
+
[!^(casgn nil? :#{base::SUPERCLASS} ...) (send (const nil? :Class) :new #{base::BASE_PATTERN})]
|
14
14
|
PATTERN
|
15
15
|
end
|
16
16
|
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
# Common functionality for working with string interpolations.
|
6
|
+
#
|
7
|
+
# @abstract Subclasses are expected to implement {#on_interpolation}.
|
8
|
+
module Interpolation
|
9
|
+
def on_dstr(node)
|
10
|
+
on_node_with_interpolations(node)
|
11
|
+
end
|
12
|
+
|
13
|
+
alias on_xstr on_dstr
|
14
|
+
alias on_dsym on_dstr
|
15
|
+
alias on_regexp on_dstr
|
16
|
+
|
17
|
+
def on_node_with_interpolations(node)
|
18
|
+
node.each_child_node(:begin) do |begin_node|
|
19
|
+
on_interpolation(begin_node)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# @!method on_interpolation(begin_node)
|
24
|
+
# Inspect the `:begin` node of an interpolation
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -159,11 +159,11 @@ module RuboCop
|
|
159
159
|
break false if a.block_type?
|
160
160
|
|
161
161
|
next if a.setter_method?
|
162
|
+
next unless kind == :with_or_without_parentheses ||
|
163
|
+
kind == :with_parentheses && parentheses?(a)
|
162
164
|
|
163
165
|
a.arguments.any? do |arg|
|
164
|
-
within_node?(node, arg)
|
165
|
-
kind == :with_parentheses &&
|
166
|
-
parentheses?(node.parent))
|
166
|
+
within_node?(node, arg)
|
167
167
|
end
|
168
168
|
end
|
169
169
|
end
|
@@ -19,6 +19,18 @@ module RuboCop
|
|
19
19
|
aligned_with_adjacent_line?(range, method(:aligned_operator?))
|
20
20
|
end
|
21
21
|
|
22
|
+
def aligned_with_preceding_assignment(token)
|
23
|
+
preceding_line_range = token.line.downto(1)
|
24
|
+
|
25
|
+
aligned_with_assignment(token, preceding_line_range)
|
26
|
+
end
|
27
|
+
|
28
|
+
def aligned_with_subsequent_assignment(token)
|
29
|
+
subsequent_line_range = token.line.upto(processed_source.lines.length)
|
30
|
+
|
31
|
+
aligned_with_assignment(token, subsequent_line_range)
|
32
|
+
end
|
33
|
+
|
22
34
|
def aligned_with_adjacent_line?(range, predicate)
|
23
35
|
# minus 2 because node.loc.line is zero-based
|
24
36
|
pre = (range.line - 2).downto(0)
|
@@ -89,6 +101,81 @@ module RuboCop
|
|
89
101
|
def aligned_identical?(range, line)
|
90
102
|
range.source == line[range.column, range.size]
|
91
103
|
end
|
104
|
+
|
105
|
+
def aligned_with_assignment(token, line_range)
|
106
|
+
token_line_indent = processed_source
|
107
|
+
.line_indentation(token.line)
|
108
|
+
assignment_lines = relevant_assignment_lines(line_range)
|
109
|
+
relevant_line_number = assignment_lines[1]
|
110
|
+
|
111
|
+
return :none unless relevant_line_number
|
112
|
+
|
113
|
+
relevant_indent = processed_source
|
114
|
+
.line_indentation(relevant_line_number)
|
115
|
+
|
116
|
+
return :none if relevant_indent < token_line_indent
|
117
|
+
|
118
|
+
assignment_line = processed_source.lines[relevant_line_number - 1]
|
119
|
+
|
120
|
+
return :none unless assignment_line
|
121
|
+
|
122
|
+
aligned_assignment?(token.pos, assignment_line) ? :yes : :no
|
123
|
+
end
|
124
|
+
|
125
|
+
def assignment_lines
|
126
|
+
@assignment_lines ||= assignment_tokens.map(&:line)
|
127
|
+
end
|
128
|
+
|
129
|
+
def assignment_tokens
|
130
|
+
@assignment_tokens ||= begin
|
131
|
+
tokens = processed_source.tokens.select(&:equal_sign?)
|
132
|
+
|
133
|
+
# we don't want to operate on equals signs which are part of an
|
134
|
+
# optarg in a method definition
|
135
|
+
# e.g.: def method(optarg = default_val); end
|
136
|
+
tokens = remove_optarg_equals(tokens, processed_source)
|
137
|
+
|
138
|
+
# Only attempt to align the first = on each line
|
139
|
+
Set.new(tokens.uniq(&:line))
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
144
|
+
# rubocop:disable Metrics/PerceivedComplexity, Metrics/MethodLength
|
145
|
+
def relevant_assignment_lines(line_range)
|
146
|
+
result = []
|
147
|
+
original_line_indent = processed_source
|
148
|
+
.line_indentation(line_range.first)
|
149
|
+
relevant_line_indent_at_level = true
|
150
|
+
|
151
|
+
line_range.each do |line_number|
|
152
|
+
current_line_indent = processed_source.line_indentation(line_number)
|
153
|
+
blank_line = processed_source.lines[line_number - 1].blank?
|
154
|
+
|
155
|
+
if (current_line_indent < original_line_indent && !blank_line) ||
|
156
|
+
(relevant_line_indent_at_level && blank_line)
|
157
|
+
break
|
158
|
+
end
|
159
|
+
|
160
|
+
result << line_number if assignment_lines.include?(line_number) &&
|
161
|
+
current_line_indent == original_line_indent
|
162
|
+
|
163
|
+
unless blank_line
|
164
|
+
relevant_line_indent_at_level = \
|
165
|
+
current_line_indent == original_line_indent
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
result
|
170
|
+
end
|
171
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
172
|
+
# rubocop:enable Metrics/PerceivedComplexity, Metrics/MethodLength
|
173
|
+
|
174
|
+
def remove_optarg_equals(asgn_tokens, processed_source)
|
175
|
+
optargs = processed_source.ast.each_node(:optarg)
|
176
|
+
optarg_eql = optargs.map { |o| o.loc.operator.begin_pos }.to_set
|
177
|
+
asgn_tokens.reject { |t| optarg_eql.include?(t.begin_pos) }
|
178
|
+
end
|
92
179
|
end
|
93
180
|
end
|
94
181
|
end
|
@@ -9,6 +9,8 @@ module RuboCop
|
|
9
9
|
NO_SPACE_COMMAND = 'Do not use'
|
10
10
|
SPACE_COMMAND = 'Use'
|
11
11
|
|
12
|
+
SINGLE_SPACE_REGEXP = /[ \t]/.freeze
|
13
|
+
|
12
14
|
private
|
13
15
|
|
14
16
|
def side_space_range(range:, side:)
|
@@ -18,11 +20,11 @@ module RuboCop
|
|
18
20
|
begin_pos = range.begin_pos
|
19
21
|
end_pos = range.end_pos
|
20
22
|
if side == :left
|
23
|
+
end_pos = begin_pos
|
21
24
|
begin_pos = reposition(src, begin_pos, -1)
|
22
|
-
end_pos -= 1
|
23
25
|
end
|
24
26
|
if side == :right
|
25
|
-
begin_pos
|
27
|
+
begin_pos = end_pos
|
26
28
|
end_pos = reposition(src, end_pos, 1)
|
27
29
|
end
|
28
30
|
Parser::Source::Range.new(buffer, begin_pos, end_pos)
|
@@ -85,15 +87,15 @@ module RuboCop
|
|
85
87
|
return false unless token
|
86
88
|
|
87
89
|
if side == :left
|
88
|
-
String(token.space_after?)
|
90
|
+
String(token.space_after?) =~ SINGLE_SPACE_REGEXP
|
89
91
|
else
|
90
|
-
String(token.space_before?)
|
92
|
+
String(token.space_before?) =~ SINGLE_SPACE_REGEXP
|
91
93
|
end
|
92
94
|
end
|
93
95
|
|
94
96
|
def reposition(src, pos, step)
|
95
97
|
offset = step == -1 ? -1 : 0
|
96
|
-
pos += step while src[pos + offset] =~
|
98
|
+
pos += step while src[pos + offset] =~ SINGLE_SPACE_REGEXP
|
97
99
|
pos.negative? ? 0 : pos
|
98
100
|
end
|
99
101
|
|
@@ -20,7 +20,7 @@ module RuboCop
|
|
20
20
|
OP_LIKE_METHODS = %i[eql? equal?].freeze
|
21
21
|
BLACKLISTED = %i[+@ -@ [] []= << === `].freeze
|
22
22
|
|
23
|
-
def_node_matcher :op_method_candidate?,
|
23
|
+
def_node_matcher :op_method_candidate?, <<~PATTERN
|
24
24
|
(def [#op_method? $_] (args $(arg [!:other !:_other])) _)
|
25
25
|
PATTERN
|
26
26
|
|
@@ -23,7 +23,7 @@ module RuboCop
|
|
23
23
|
# than just standard ASCII characters
|
24
24
|
SNAKE_CASE = /^[[:digit:][:upper:]_]+$/.freeze
|
25
25
|
|
26
|
-
def_node_matcher :class_or_struct_return_method?,
|
26
|
+
def_node_matcher :class_or_struct_return_method?, <<~PATTERN
|
27
27
|
(send
|
28
28
|
(const _ {:Class :Struct}) :new
|
29
29
|
...)
|
@@ -63,7 +63,7 @@ module RuboCop
|
|
63
63
|
(node.receiver.nil? || !literal_receiver?(node))
|
64
64
|
end
|
65
65
|
|
66
|
-
def_node_matcher :literal_receiver?,
|
66
|
+
def_node_matcher :literal_receiver?, <<~PATTERN
|
67
67
|
{(send literal? ...)
|
68
68
|
(send (begin literal?) ...)}
|
69
69
|
PATTERN
|
@@ -6,6 +6,15 @@ module RuboCop
|
|
6
6
|
# This cop makes sure that all methods use the configured style,
|
7
7
|
# snake_case or camelCase, for their names.
|
8
8
|
#
|
9
|
+
# This cop has `IgnoredPatterns` configuration option.
|
10
|
+
#
|
11
|
+
# Naming/MethodName:
|
12
|
+
# IgnoredPatterns:
|
13
|
+
# - '\A\s*onSelectionBulkChange\s*'
|
14
|
+
# - '\A\s*onSelectionCleared\s*'
|
15
|
+
#
|
16
|
+
# Method names matching patterns are always allowed.
|
17
|
+
#
|
9
18
|
# @example EnforcedStyle: snake_case (default)
|
10
19
|
# # bad
|
11
20
|
# def fooBar; end
|
@@ -21,11 +30,13 @@ module RuboCop
|
|
21
30
|
# def fooBar; end
|
22
31
|
class MethodName < Cop
|
23
32
|
include ConfigurableNaming
|
33
|
+
include IgnoredPattern
|
24
34
|
|
25
35
|
MSG = 'Use %<style>s for method names.'
|
26
36
|
|
27
37
|
def on_def(node)
|
28
|
-
return if node.operator_method?
|
38
|
+
return if node.operator_method? ||
|
39
|
+
matches_ignored_pattern?(node.method_name)
|
29
40
|
|
30
41
|
check_name(node, node.method_name, node.loc.name)
|
31
42
|
end
|