rubocop 0.83.0 → 0.87.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 +26 -18
- data/config/default.yml +128 -23
- data/lib/rubocop.rb +21 -59
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cli.rb +2 -4
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +42 -7
- data/lib/rubocop/cli/command/init_dotfile.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +2 -6
- data/lib/rubocop/comment_config.rb +1 -1
- data/lib/rubocop/config.rb +1 -1
- data/lib/rubocop/config_loader.rb +24 -70
- data/lib/rubocop/config_loader_resolver.rb +21 -9
- data/lib/rubocop/config_obsoletion.rb +0 -1
- data/lib/rubocop/config_store.rb +12 -2
- data/lib/rubocop/cop/autocorrect_logic.rb +14 -25
- data/lib/rubocop/cop/base.rb +399 -0
- data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +10 -20
- data/lib/rubocop/cop/commissioner.rb +48 -71
- data/lib/rubocop/cop/cop.rb +91 -227
- data/lib/rubocop/cop/corrector.rb +38 -115
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +2 -6
- data/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/space_corrector.rb +1 -3
- data/lib/rubocop/cop/gemspec/ordered_dependencies.rb +1 -3
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +1 -1
- data/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +1 -1
- data/lib/rubocop/cop/generator.rb +2 -2
- data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
- data/lib/rubocop/cop/ignored_node.rb +1 -3
- data/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +11 -14
- data/lib/rubocop/cop/layout/case_indentation.rb +21 -22
- data/lib/rubocop/cop/layout/class_structure.rb +19 -16
- data/lib/rubocop/cop/layout/comment_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/empty_comment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +2 -6
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +57 -4
- data/lib/rubocop/cop/layout/end_of_line.rb +3 -3
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +6 -4
- data/lib/rubocop/cop/layout/first_array_element_indentation.rb +1 -3
- data/lib/rubocop/cop/layout/first_array_element_line_break.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 +8 -9
- data/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb +3 -7
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +20 -103
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -3
- data/lib/rubocop/cop/layout/line_length.rb +17 -17
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_block_parameters.rb +19 -25
- data/lib/rubocop/cop/layout/space_around_keyword.rb +2 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +1 -3
- data/lib/rubocop/cop/layout/space_around_operators.rb +1 -1
- data/lib/rubocop/cop/layout/space_before_block_braces.rb +14 -0
- data/lib/rubocop/cop/layout/space_before_comment.rb +1 -3
- data/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb +2 -4
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb +2 -2
- data/lib/rubocop/cop/layout/space_inside_reference_brackets.rb +1 -3
- data/lib/rubocop/cop/legacy/corrections_proxy.rb +49 -0
- data/lib/rubocop/cop/legacy/corrector.rb +29 -0
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +5 -2
- data/lib/rubocop/cop/lint/constant_resolution.rb +89 -0
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -3
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +38 -2
- data/lib/rubocop/cop/lint/interpolation_check.rb +13 -0
- data/lib/rubocop/cop/lint/loop.rb +1 -1
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +69 -0
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +2 -2
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +20 -5
- data/lib/rubocop/cop/lint/percent_string_array.rb +2 -4
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +1 -1
- data/lib/rubocop/cop/lint/raise_exception.rb +12 -4
- data/lib/rubocop/cop/lint/rand_one.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +31 -25
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +2 -2
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +6 -0
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +9 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +15 -2
- data/lib/rubocop/cop/lint/syntax.rb +11 -28
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unused_method_argument.rb +1 -1
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +2 -4
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +1 -1
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +22 -0
- data/lib/rubocop/cop/metrics/class_length.rb +25 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +35 -3
- data/lib/rubocop/cop/metrics/method_length.rb +23 -0
- data/lib/rubocop/cop/metrics/module_length.rb +25 -2
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +129 -0
- data/lib/rubocop/cop/metrics/utils/iterating_block.rb +61 -0
- data/lib/rubocop/cop/migration/department_name.rb +7 -7
- data/lib/rubocop/cop/mixin/alignment.rb +1 -3
- data/lib/rubocop/cop/mixin/allowed_methods.rb +19 -0
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -3
- data/lib/rubocop/cop/mixin/auto_corrector.rb +12 -0
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +3 -9
- data/lib/rubocop/cop/mixin/code_length.rb +4 -0
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -3
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +3 -5
- data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
- data/lib/rubocop/cop/mixin/documentation_comment.rb +2 -2
- data/lib/rubocop/cop/mixin/end_keyword_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +3 -1
- data/lib/rubocop/cop/mixin/first_element_line_break.rb +1 -1
- data/lib/rubocop/cop/mixin/ignored_pattern.rb +1 -1
- data/lib/rubocop/cop/mixin/line_length_help.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +1 -1
- data/lib/rubocop/cop/mixin/nil_methods.rb +3 -5
- data/lib/rubocop/cop/mixin/ordered_gem_node.rb +6 -1
- data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
- data/lib/rubocop/cop/mixin/preceding_following_alignment.rb +1 -1
- data/lib/rubocop/cop/mixin/range_help.rb +1 -1
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +43 -0
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +10 -5
- data/lib/rubocop/cop/mixin/too_many_lines.rb +3 -13
- data/lib/rubocop/cop/mixin/trailing_comma.rb +2 -4
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +7 -5
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +27 -4
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +3 -3
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +11 -1
- data/lib/rubocop/cop/naming/file_name.rb +28 -17
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +4 -6
- data/lib/rubocop/cop/naming/variable_name.rb +1 -1
- data/lib/rubocop/cop/naming/variable_number.rb +1 -1
- data/lib/rubocop/cop/offense.rb +16 -2
- data/lib/rubocop/cop/registry.rb +63 -10
- data/lib/rubocop/cop/severity.rb +1 -3
- data/lib/rubocop/cop/style/accessor_grouping.rb +136 -0
- data/lib/rubocop/cop/style/and_or.rb +2 -2
- data/lib/rubocop/cop/style/array_join.rb +1 -1
- data/lib/rubocop/cop/style/attr.rb +1 -3
- data/lib/rubocop/cop/style/bare_percent_literals.rb +2 -2
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +121 -0
- data/lib/rubocop/cop/style/block_delimiters.rb +4 -12
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- data/lib/rubocop/cop/style/class_vars.rb +21 -0
- data/lib/rubocop/cop/style/command_literal.rb +1 -1
- data/lib/rubocop/cop/style/commented_keyword.rb +2 -2
- data/lib/rubocop/cop/style/conditional_assignment.rb +2 -4
- data/lib/rubocop/cop/style/copyright.rb +5 -5
- data/lib/rubocop/cop/style/date_time.rb +1 -1
- data/lib/rubocop/cop/style/dir.rb +2 -2
- data/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb +1 -1
- data/lib/rubocop/cop/style/documentation.rb +2 -2
- data/lib/rubocop/cop/style/double_negation.rb +41 -4
- data/lib/rubocop/cop/style/empty_case_condition.rb +8 -6
- data/lib/rubocop/cop/style/empty_literal.rb +6 -8
- data/lib/rubocop/cop/style/empty_method.rb +1 -1
- data/lib/rubocop/cop/style/encoding.rb +1 -1
- data/lib/rubocop/cop/style/expand_path_arguments.rb +2 -2
- data/lib/rubocop/cop/style/exponential_notation.rb +5 -5
- 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/hash_each_methods.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +16 -7
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
- data/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb +12 -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/ip_addresses.rb +1 -1
- 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/multiline_block_chain.rb +10 -1
- data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
- data/lib/rubocop/cop/style/multiline_memoization.rb +1 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +17 -6
- data/lib/rubocop/cop/style/mutable_constant.rb +4 -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 -5
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +27 -0
- data/lib/rubocop/cop/style/next.rb +2 -2
- data/lib/rubocop/cop/style/non_nil_check.rb +1 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +2 -2
- data/lib/rubocop/cop/style/one_line_conditional.rb +2 -6
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/random_with_offset.rb +4 -10
- data/lib/rubocop/cop/style/redundant_assignment.rb +117 -0
- data/lib/rubocop/cop/style/redundant_conditional.rb +4 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +14 -10
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +122 -0
- data/lib/rubocop/cop/style/redundant_freeze.rb +1 -1
- data/lib/rubocop/cop/style/redundant_parentheses.rb +10 -8
- data/lib/rubocop/cop/style/redundant_percent_q.rb +3 -3
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +90 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +121 -0
- data/lib/rubocop/cop/style/redundant_self.rb +6 -9
- data/lib/rubocop/cop/style/rescue_standard_error.rb +1 -1
- data/lib/rubocop/cop/style/safe_navigation.rb +2 -6
- data/lib/rubocop/cop/style/sample.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +1 -1
- data/lib/rubocop/cop/style/signal_exception.rb +1 -1
- data/lib/rubocop/cop/style/slicing_with_range.rb +1 -1
- data/lib/rubocop/cop/style/special_global_vars.rb +2 -6
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/struct_inheritance.rb +23 -2
- data/lib/rubocop/cop/style/symbol_array.rb +5 -5
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +2 -4
- data/lib/rubocop/cop/style/trailing_comma_in_arguments.rb +3 -3
- data/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb +3 -3
- data/lib/rubocop/cop/style/trailing_comma_in_block_args.rb +13 -13
- data/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb +3 -3
- data/lib/rubocop/cop/style/trailing_underscore_variable.rb +1 -3
- data/lib/rubocop/cop/style/trivial_accessors.rb +8 -7
- data/lib/rubocop/cop/style/unless_else.rb +1 -1
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/style/yoda_condition.rb +18 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +2 -2
- data/lib/rubocop/cop/team.rb +141 -81
- data/lib/rubocop/cop/util.rb +3 -3
- data/lib/rubocop/cop/utils/format_string.rb +19 -2
- data/lib/rubocop/cop/variable_force.rb +3 -9
- data/lib/rubocop/cop/variable_force/branch.rb +1 -3
- data/lib/rubocop/cop/variable_force/variable.rb +2 -6
- data/lib/rubocop/ext/processed_source.rb +18 -0
- data/lib/rubocop/formatter/base_formatter.rb +0 -4
- data/lib/rubocop/formatter/disabled_config_formatter.rb +5 -13
- data/lib/rubocop/formatter/formatter_set.rb +2 -4
- data/lib/rubocop/formatter/junit_formatter.rb +14 -4
- data/lib/rubocop/magic_comment.rb +1 -1
- data/lib/rubocop/name_similarity.rb +7 -3
- data/lib/rubocop/options.rb +30 -15
- data/lib/rubocop/path_util.rb +2 -2
- data/lib/rubocop/platform.rb +1 -1
- data/lib/rubocop/rake_task.rb +6 -9
- data/lib/rubocop/remote_config.rb +1 -3
- data/lib/rubocop/result_cache.rb +5 -7
- data/lib/rubocop/rspec/cop_helper.rb +5 -28
- data/lib/rubocop/rspec/expect_offense.rb +60 -23
- data/lib/rubocop/rspec/shared_contexts.rb +55 -17
- data/lib/rubocop/runner.rb +42 -38
- data/lib/rubocop/target_finder.rb +2 -4
- data/lib/rubocop/target_ruby.rb +5 -2
- data/lib/rubocop/version.rb +5 -3
- metadata +60 -62
- data/lib/rubocop/ast/builder.rb +0 -85
- data/lib/rubocop/ast/node.rb +0 -637
- data/lib/rubocop/ast/node/alias_node.rb +0 -24
- data/lib/rubocop/ast/node/and_node.rb +0 -29
- data/lib/rubocop/ast/node/args_node.rb +0 -29
- data/lib/rubocop/ast/node/array_node.rb +0 -70
- data/lib/rubocop/ast/node/block_node.rb +0 -121
- data/lib/rubocop/ast/node/break_node.rb +0 -17
- data/lib/rubocop/ast/node/case_match_node.rb +0 -56
- data/lib/rubocop/ast/node/case_node.rb +0 -56
- data/lib/rubocop/ast/node/class_node.rb +0 -31
- data/lib/rubocop/ast/node/def_node.rb +0 -82
- data/lib/rubocop/ast/node/defined_node.rb +0 -17
- data/lib/rubocop/ast/node/ensure_node.rb +0 -17
- data/lib/rubocop/ast/node/float_node.rb +0 -12
- data/lib/rubocop/ast/node/for_node.rb +0 -53
- data/lib/rubocop/ast/node/forward_args_node.rb +0 -18
- data/lib/rubocop/ast/node/hash_node.rb +0 -109
- data/lib/rubocop/ast/node/if_node.rb +0 -175
- data/lib/rubocop/ast/node/int_node.rb +0 -12
- data/lib/rubocop/ast/node/keyword_splat_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/basic_literal_node.rb +0 -16
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +0 -43
- data/lib/rubocop/ast/node/mixin/collection_node.rb +0 -15
- data/lib/rubocop/ast/node/mixin/conditional_node.rb +0 -45
- data/lib/rubocop/ast/node/mixin/hash_element_node.rb +0 -125
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +0 -269
- 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 -17
- data/lib/rubocop/ast/node/str_node.rb +0 -16
- data/lib/rubocop/ast/node/super_node.rb +0 -21
- data/lib/rubocop/ast/node/symbol_node.rb +0 -12
- data/lib/rubocop/ast/node/until_node.rb +0 -35
- data/lib/rubocop/ast/node/when_node.rb +0 -53
- data/lib/rubocop/ast/node/while_node.rb +0 -35
- data/lib/rubocop/ast/node/yield_node.rb +0 -21
- data/lib/rubocop/ast/sexp.rb +0 -16
- data/lib/rubocop/ast/traversal.rb +0 -202
- data/lib/rubocop/cop/mixin/classish_length.rb +0 -37
- data/lib/rubocop/node_pattern.rb +0 -887
- data/lib/rubocop/processed_source.rb +0 -213
- data/lib/rubocop/token.rb +0 -114
@@ -67,9 +67,7 @@ module RuboCop
|
|
67
67
|
def style
|
68
68
|
@style ||= begin
|
69
69
|
s = cop_config[style_parameter_name].to_sym
|
70
|
-
unless supported_styles.include?(s)
|
71
|
-
raise "Unknown style #{s} selected!"
|
72
|
-
end
|
70
|
+
raise "Unknown style #{s} selected!" unless supported_styles.include?(s)
|
73
71
|
|
74
72
|
s
|
75
73
|
end
|
@@ -10,7 +10,7 @@ module RuboCop
|
|
10
10
|
if valid_name?(node, name)
|
11
11
|
correct_style_detected
|
12
12
|
else
|
13
|
-
add_offense(
|
13
|
+
add_offense(name_range, message: message(style)) do
|
14
14
|
report_opposing_styles(node, name)
|
15
15
|
end
|
16
16
|
end
|
@@ -18,14 +18,12 @@ module RuboCop
|
|
18
18
|
|
19
19
|
def report_opposing_styles(node, name)
|
20
20
|
alternative_styles.each do |alternative|
|
21
|
-
if valid_name?(node, name, alternative)
|
22
|
-
return unexpected_style_detected(alternative)
|
23
|
-
end
|
21
|
+
return unexpected_style_detected(alternative) if valid_name?(node, name, alternative)
|
24
22
|
end
|
25
23
|
end
|
26
24
|
|
27
25
|
def valid_name?(node, name, given_style = style)
|
28
|
-
name.match(self.class::FORMATS.fetch(given_style)) ||
|
26
|
+
name.match?(self.class::FORMATS.fetch(given_style)) ||
|
29
27
|
class_emitter_method?(node, name)
|
30
28
|
end
|
31
29
|
|
@@ -41,11 +41,11 @@ module RuboCop
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def interpreter_directive_comment?(comment)
|
44
|
-
|
44
|
+
/^#\s*(frozen_string_literal|encoding):/.match?(comment.text)
|
45
45
|
end
|
46
46
|
|
47
47
|
def rubocop_directive_comment?(comment)
|
48
|
-
comment.text
|
48
|
+
CommentConfig::COMMENT_DIRECTIVE_REGEXP.match?(comment.text)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -51,7 +51,7 @@ module RuboCop
|
|
51
51
|
|
52
52
|
def accept_end_kw_alignment?(end_loc)
|
53
53
|
end_loc.nil? || # Discard modifier forms of if/while/until.
|
54
|
-
processed_source.lines[end_loc.line - 1]
|
54
|
+
!/\A[ \t]*end/.match?(processed_source.lines[end_loc.line - 1])
|
55
55
|
end
|
56
56
|
|
57
57
|
def style_parameter_name
|
@@ -10,7 +10,9 @@ module RuboCop
|
|
10
10
|
PATTERN
|
11
11
|
|
12
12
|
base.def_node_matcher :class_new_definition, <<~PATTERN
|
13
|
-
[!^(casgn nil? :#{base::SUPERCLASS} ...)
|
13
|
+
[!^(casgn {nil? cbase} :#{base::SUPERCLASS} ...)
|
14
|
+
!^^(casgn {nil? cbase} :#{base::SUPERCLASS} (block ...))
|
15
|
+
(send (const {nil? cbase} :Class) :new #{base::BASE_PATTERN})]
|
14
16
|
PATTERN
|
15
17
|
end
|
16
18
|
|
@@ -152,7 +152,7 @@ module RuboCop
|
|
152
152
|
expression
|
153
153
|
end
|
154
154
|
|
155
|
-
def argument_in_method_call(node, kind)
|
155
|
+
def argument_in_method_call(node, kind) # rubocop:todo Metrics/CyclomaticComplexity
|
156
156
|
node.each_ancestor(:send, :block).find do |a|
|
157
157
|
# If the node is inside a block, it makes no difference if that block
|
158
158
|
# is an argument in a method call. It doesn't count.
|
@@ -7,19 +7,17 @@ module RuboCop
|
|
7
7
|
# 2. Added to NilClass by explicitly requiring any standard libraries
|
8
8
|
# 3. Cop's configuration parameter AllowedMethods.
|
9
9
|
module NilMethods
|
10
|
+
include AllowedMethods
|
11
|
+
|
10
12
|
private
|
11
13
|
|
12
14
|
def nil_methods
|
13
|
-
nil.methods + other_stdlib_methods + allowed_methods
|
15
|
+
nil.methods + other_stdlib_methods + allowed_methods.map(&:to_sym)
|
14
16
|
end
|
15
17
|
|
16
18
|
def other_stdlib_methods
|
17
19
|
[:to_d]
|
18
20
|
end
|
19
|
-
|
20
|
-
def allowed_methods
|
21
|
-
cop_config['AllowedMethods'].map(&:to_sym)
|
22
|
-
end
|
23
21
|
end
|
24
22
|
end
|
25
23
|
end
|
@@ -15,8 +15,13 @@ module RuboCop
|
|
15
15
|
node.source_range
|
16
16
|
end
|
17
17
|
|
18
|
+
def gem_canonical_name(name)
|
19
|
+
name = name.tr('-_', '') unless cop_config['ConsiderPunctuation']
|
20
|
+
name.downcase
|
21
|
+
end
|
22
|
+
|
18
23
|
def case_insensitive_out_of_order?(string_a, string_b)
|
19
|
-
string_a
|
24
|
+
gem_canonical_name(string_a) < gem_canonical_name(string_b)
|
20
25
|
end
|
21
26
|
|
22
27
|
def consecutive_lines(previous, current)
|
@@ -9,8 +9,7 @@ module RuboCop
|
|
9
9
|
def parens_required?(node)
|
10
10
|
range = node.source_range
|
11
11
|
source = range.source_buffer.source
|
12
|
-
source[range.begin_pos - 1]
|
13
|
-
source[range.end_pos] =~ /[a-z]/
|
12
|
+
/[a-z]/.match?(source[range.begin_pos - 1]) || /[a-z]/.match?(source[range.end_pos])
|
14
13
|
end
|
15
14
|
end
|
16
15
|
end
|
@@ -109,7 +109,7 @@ module RuboCop
|
|
109
109
|
|
110
110
|
def move_pos(src, pos, step, condition, regexp)
|
111
111
|
offset = step == -1 ? -1 : 0
|
112
|
-
pos += step while condition && src[pos + offset]
|
112
|
+
pos += step while condition && regexp.match?(src[pos + offset])
|
113
113
|
pos.negative? ? 0 : pos
|
114
114
|
end
|
115
115
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
# Common functionality for handling Regexp literals.
|
6
|
+
module RegexpLiteralHelp
|
7
|
+
private
|
8
|
+
|
9
|
+
def freespace_mode_regexp?(node)
|
10
|
+
regopt = node.children.find(&:regopt_type?)
|
11
|
+
|
12
|
+
regopt.children.include?(:x)
|
13
|
+
end
|
14
|
+
|
15
|
+
def pattern_source(node)
|
16
|
+
freespace_mode = freespace_mode_regexp?(node)
|
17
|
+
|
18
|
+
node.children.reject(&:regopt_type?).map do |child|
|
19
|
+
source_with_comments_and_interpolations_blanked(child, freespace_mode)
|
20
|
+
end.join
|
21
|
+
end
|
22
|
+
|
23
|
+
def source_with_comments_and_interpolations_blanked(child, freespace_mode)
|
24
|
+
source = child.source
|
25
|
+
|
26
|
+
# We don't want to consider the contents of interpolations or free-space mode comments as
|
27
|
+
# part of the pattern source, but need to preserve their width, to allow offsets to
|
28
|
+
# correctly line up with the original source: spaces have no effect, and preserve width.
|
29
|
+
if child.begin_type?
|
30
|
+
replace_match_with_spaces(source, /.*/) # replace all content
|
31
|
+
elsif freespace_mode
|
32
|
+
replace_match_with_spaces(source, /(?<!\\)#.*/) # replace any comments
|
33
|
+
else
|
34
|
+
source
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def replace_match_with_spaces(source, pattern)
|
39
|
+
source.sub(pattern) { ' ' * Regexp.last_match[0].length }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -14,7 +14,7 @@ module RuboCop
|
|
14
14
|
private
|
15
15
|
|
16
16
|
def side_space_range(range:, side:)
|
17
|
-
buffer =
|
17
|
+
buffer = processed_source.buffer
|
18
18
|
src = buffer.source
|
19
19
|
|
20
20
|
begin_pos = range.begin_pos
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
47
47
|
def token_table
|
48
48
|
@token_table ||= begin
|
49
49
|
table = {}
|
50
|
-
|
50
|
+
processed_source.tokens.each_with_index do |t, ix|
|
51
51
|
table[t.line] ||= {}
|
52
52
|
table[t.line][t.column] = ix
|
53
53
|
end
|
@@ -55,6 +55,11 @@ module RuboCop
|
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
+
def on_new_investigation
|
59
|
+
@token_table = nil
|
60
|
+
super
|
61
|
+
end
|
62
|
+
|
58
63
|
def no_space_offenses(node, # rubocop:disable Metrics/ParameterLists
|
59
64
|
left_token,
|
60
65
|
right_token,
|
@@ -87,15 +92,15 @@ module RuboCop
|
|
87
92
|
return false unless token
|
88
93
|
|
89
94
|
if side == :left
|
90
|
-
String(token.space_after?)
|
95
|
+
SINGLE_SPACE_REGEXP.match?(String(token.space_after?))
|
91
96
|
else
|
92
|
-
String(token.space_before?)
|
97
|
+
SINGLE_SPACE_REGEXP.match?(String(token.space_before?))
|
93
98
|
end
|
94
99
|
end
|
95
100
|
|
96
101
|
def reposition(src, pos, step)
|
97
102
|
offset = step == -1 ? -1 : 0
|
98
|
-
pos += step while src[pos + offset]
|
103
|
+
pos += step while SINGLE_SPACE_REGEXP.match?(src[pos + offset])
|
99
104
|
pos.negative? ? 0 : pos
|
100
105
|
end
|
101
106
|
|
@@ -16,19 +16,9 @@ module RuboCop
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def code_length(node)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
lines.count { |line| !irrelevant_line(line) }
|
23
|
-
end
|
24
|
-
|
25
|
-
def extract_body(node)
|
26
|
-
case node.type
|
27
|
-
when :block, :def, :defs
|
28
|
-
node.body
|
29
|
-
else
|
30
|
-
node
|
31
|
-
end
|
19
|
+
Metrics::Utils::CodeLengthCalculator.new(node,
|
20
|
+
count_comments: count_comments?,
|
21
|
+
foldable_types: count_as_one).calculate
|
32
22
|
end
|
33
23
|
end
|
34
24
|
end
|
@@ -31,7 +31,7 @@ module RuboCop
|
|
31
31
|
# If there is any heredoc in items, then match the comma succeeding
|
32
32
|
# any whitespace (except newlines), otherwise allow for newlines
|
33
33
|
comma_regex = any_heredoc?(items) ? /\A[^\S\n]*,/ : /\A\s*,/
|
34
|
-
range.source
|
34
|
+
comma_regex.match?(range.source) && range.source.index(',')
|
35
35
|
end
|
36
36
|
|
37
37
|
def check_comma(node, kind, comma_pos)
|
@@ -184,9 +184,7 @@ module RuboCop
|
|
184
184
|
# ...
|
185
185
|
# SOURCE
|
186
186
|
# })
|
187
|
-
if node.pair_type? || node.hash_type?
|
188
|
-
return heredoc?(node.children.last)
|
189
|
-
end
|
187
|
+
return heredoc?(node.children.last) if node.pair_type? || node.hash_type?
|
190
188
|
|
191
189
|
false
|
192
190
|
end
|
@@ -15,11 +15,13 @@ module RuboCop
|
|
15
15
|
args.each do |arg|
|
16
16
|
# Argument names might be "_" or prefixed with "_" to indicate they
|
17
17
|
# are unused. Trim away this prefix and only analyse the basename.
|
18
|
-
|
18
|
+
name_child = arg.children.first
|
19
|
+
next if name_child.nil?
|
20
|
+
|
21
|
+
full_name = name_child.to_s
|
19
22
|
next if full_name == '_'
|
20
23
|
|
21
|
-
name = full_name.gsub(/\A(
|
22
|
-
next if (arg.restarg_type? || arg.kwrestarg_type?) && name.empty?
|
24
|
+
name = full_name.gsub(/\A(_+)/, '')
|
23
25
|
next if allowed_names.include?(name)
|
24
26
|
|
25
27
|
range = arg_range(arg, name.size)
|
@@ -44,7 +46,7 @@ module RuboCop
|
|
44
46
|
end
|
45
47
|
|
46
48
|
def uppercase?(name)
|
47
|
-
|
49
|
+
/[[:upper:]]/.match?(name)
|
48
50
|
end
|
49
51
|
|
50
52
|
def name_type(node)
|
@@ -62,7 +64,7 @@ module RuboCop
|
|
62
64
|
end
|
63
65
|
|
64
66
|
def ends_with_num?(name)
|
65
|
-
name[-1]
|
67
|
+
/\d/.match?(name[-1])
|
66
68
|
end
|
67
69
|
|
68
70
|
def length_offense(node, range)
|
@@ -5,7 +5,9 @@
|
|
5
5
|
module RuboCop
|
6
6
|
module Cop
|
7
7
|
module Naming
|
8
|
-
# This cop checks for non-ascii characters in identifier names.
|
8
|
+
# This cop checks for non-ascii characters in identifier and constant names.
|
9
|
+
# Identifiers are always checked and whether constants are checked
|
10
|
+
# can be controlled using AsciiConstants config.
|
9
11
|
#
|
10
12
|
# @example
|
11
13
|
# # bad
|
@@ -36,21 +38,42 @@ module RuboCop
|
|
36
38
|
# # good
|
37
39
|
# params[:width_gteq]
|
38
40
|
#
|
41
|
+
# @example AsciiConstants: true (default)
|
42
|
+
# # bad
|
43
|
+
# class Foö
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# FOÖ = "foo"
|
47
|
+
#
|
48
|
+
# @example AsciiConstants: false
|
49
|
+
# # good
|
50
|
+
# class Foö
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# FOÖ = "foo"
|
54
|
+
#
|
39
55
|
class AsciiIdentifiers < Cop
|
40
56
|
include RangeHelp
|
41
57
|
|
42
|
-
|
58
|
+
IDENTIFIER_MSG = 'Use only ascii symbols in identifiers.'
|
59
|
+
CONSTANT_MSG = 'Use only ascii symbols in constants.'
|
43
60
|
|
44
61
|
def investigate(processed_source)
|
45
62
|
processed_source.each_token do |token|
|
46
|
-
next
|
63
|
+
next if !should_check?(token) || token.text.ascii_only?
|
47
64
|
|
48
|
-
|
65
|
+
message = token.type == :tIDENTIFIER ? IDENTIFIER_MSG : CONSTANT_MSG
|
66
|
+
add_offense(token, location: first_offense_range(token), message: message)
|
49
67
|
end
|
50
68
|
end
|
51
69
|
|
52
70
|
private
|
53
71
|
|
72
|
+
def should_check?(token)
|
73
|
+
token.type == :tIDENTIFIER ||
|
74
|
+
(token.type == :tCONSTANT && cop_config['AsciiConstants'])
|
75
|
+
end
|
76
|
+
|
54
77
|
def first_offense_range(identifier)
|
55
78
|
expression = identifier.pos
|
56
79
|
first_offense = first_non_ascii_chars(identifier.text)
|
@@ -18,7 +18,7 @@ module RuboCop
|
|
18
18
|
'name its argument `other`.'
|
19
19
|
|
20
20
|
OP_LIKE_METHODS = %i[eql? equal?].freeze
|
21
|
-
|
21
|
+
EXCLUDED = %i[+@ -@ [] []= << === `].freeze
|
22
22
|
|
23
23
|
def_node_matcher :op_method_candidate?, <<~PATTERN
|
24
24
|
(def [#op_method? $_] (args $(arg [!:other !:_other])) _)
|
@@ -33,9 +33,9 @@ module RuboCop
|
|
33
33
|
private
|
34
34
|
|
35
35
|
def op_method?(name)
|
36
|
-
return false if
|
36
|
+
return false if EXCLUDED.include?(name)
|
37
37
|
|
38
|
-
|
38
|
+
!/\A\w/.match?(name) || OP_LIKE_METHODS.include?(name)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|