rubocop 0.82.0 → 0.86.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 +27 -19
- data/config/default.yml +111 -23
- data/lib/rubocop.rb +16 -59
- data/lib/rubocop/ast_aliases.rb +8 -0
- data/lib/rubocop/cli.rb +3 -3
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +2 -2
- 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 +6 -2
- data/lib/rubocop/config_loader.rb +19 -24
- data/lib/rubocop/config_loader_resolver.rb +45 -6
- data/lib/rubocop/config_store.rb +12 -2
- data/lib/rubocop/config_validator.rb +2 -1
- data/lib/rubocop/cop/autocorrect_logic.rb +1 -2
- data/lib/rubocop/cop/bundler/gem_comment.rb +70 -1
- data/lib/rubocop/cop/commissioner.rb +0 -21
- data/lib/rubocop/cop/cop.rb +36 -21
- 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/generator.rb +4 -3
- data/lib/rubocop/cop/generator/configuration_injector.rb +1 -1
- data/lib/rubocop/cop/ignored_node.rb +1 -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/comment_indentation.rb +3 -3
- data/lib/rubocop/cop/layout/condition_position.rb +12 -2
- 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 +128 -0
- data/lib/rubocop/cop/layout/end_of_line.rb +3 -3
- data/lib/rubocop/cop/layout/first_argument_indentation.rb +2 -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 +7 -7
- 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 +21 -18
- data/lib/rubocop/cop/layout/multiline_block_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -3
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +13 -4
- data/lib/rubocop/cop/layout/space_after_colon.rb +1 -1
- 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 +19 -2
- 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/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/constant_resolution.rb +89 -0
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +137 -0
- data/lib/rubocop/cop/lint/duplicate_methods.rb +1 -5
- data/lib/rubocop/cop/lint/empty_when.rb +29 -6
- data/lib/rubocop/cop/lint/ensure_return.rb +19 -2
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +1 -3
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +38 -2
- data/lib/rubocop/cop/lint/literal_as_condition.rb +10 -13
- 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_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +7 -7
- 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/percent_symbol_array.rb +1 -1
- data/lib/rubocop/cop/lint/raise_exception.rb +12 -4
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +5 -8
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +3 -3
- 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 +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +11 -4
- data/lib/rubocop/cop/lint/syntax.rb +1 -3
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- 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/metrics/cyclomatic_complexity.rb +35 -3
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +1 -1
- 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/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/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/first_element_line_break.rb +1 -1
- data/lib/rubocop/cop/mixin/frozen_string_literal.rb +10 -1
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +8 -1
- 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/multiline_expression_indentation.rb +1 -1
- data/lib/rubocop/cop/mixin/parentheses.rb +1 -2
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +1 -1
- 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/statement_modifier.rb +7 -23
- data/lib/rubocop/cop/mixin/string_literals_help.rb +1 -1
- data/lib/rubocop/cop/mixin/surrounding_space.rb +3 -3
- 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 +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- 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 -5
- data/lib/rubocop/cop/naming/predicate_name.rb +1 -1
- data/lib/rubocop/cop/registry.rb +63 -10
- data/lib/rubocop/cop/severity.rb +1 -3
- 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/block_delimiters.rb +4 -12
- data/lib/rubocop/cop/style/case_equality.rb +1 -1
- data/lib/rubocop/cop/style/class_and_module_children.rb +1 -1
- 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/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 +1 -3
- data/lib/rubocop/cop/style/empty_method.rb +1 -5
- data/lib/rubocop/cop/style/encoding.rb +1 -1
- 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/guard_clause.rb +25 -2
- 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_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/ip_addresses.rb +1 -1
- data/lib/rubocop/cop/style/lambda_call.rb +0 -20
- 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_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/multiline_when_then.rb +16 -1
- 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_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/optional_arguments.rb +1 -1
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +1 -1
- data/lib/rubocop/cop/style/redundant_conditional.rb +4 -3
- data/lib/rubocop/cop/style/redundant_fetch_block.rb +103 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +3 -7
- 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 +121 -0
- data/lib/rubocop/cop/style/redundant_self.rb +6 -9
- 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/slicing_with_range.rb +39 -0
- data/lib/rubocop/cop/style/special_global_vars.rb +2 -6
- data/lib/rubocop/cop/style/struct_inheritance.rb +21 -0
- data/lib/rubocop/cop/style/symbol_array.rb +5 -5
- 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/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/team.rb +69 -25
- data/lib/rubocop/cop/util.rb +27 -3
- data/lib/rubocop/cop/utils/format_string.rb +18 -0
- data/lib/rubocop/cop/variable_force.rb +3 -9
- data/lib/rubocop/cop/variable_force/assignment.rb +1 -0
- data/lib/rubocop/cop/variable_force/branch.rb +1 -3
- data/lib/rubocop/cop/variable_force/scope.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +3 -6
- data/lib/rubocop/ext/processed_source.rb +18 -0
- data/lib/rubocop/formatter/base_formatter.rb +0 -4
- data/lib/rubocop/formatter/disabled_config_formatter.rb +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 +18 -9
- data/lib/rubocop/options.rb +26 -11
- data/lib/rubocop/path_util.rb +2 -2
- data/lib/rubocop/platform.rb +1 -1
- data/lib/rubocop/remote_config.rb +1 -3
- data/lib/rubocop/result_cache.rb +5 -7
- data/lib/rubocop/rspec/cop_helper.rb +2 -25
- data/lib/rubocop/rspec/expect_offense.rb +58 -15
- data/lib/rubocop/rspec/shared_contexts.rb +54 -16
- data/lib/rubocop/runner.rb +20 -13
- data/lib/rubocop/target_finder.rb +8 -8
- data/lib/rubocop/target_ruby.rb +4 -1
- data/lib/rubocop/version.rb +5 -3
- metadata +51 -74
- 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 -13
- data/lib/rubocop/ast/node/str_node.rb +0 -16
- data/lib/rubocop/ast/node/super_node.rb +0 -21
- data/lib/rubocop/ast/node/symbol_node.rb +0 -12
- data/lib/rubocop/ast/node/until_node.rb +0 -35
- data/lib/rubocop/ast/node/when_node.rb +0 -53
- data/lib/rubocop/ast/node/while_node.rb +0 -35
- data/lib/rubocop/ast/node/yield_node.rb +0 -21
- data/lib/rubocop/ast/sexp.rb +0 -16
- data/lib/rubocop/ast/traversal.rb +0 -202
- data/lib/rubocop/node_pattern.rb +0 -887
- data/lib/rubocop/processed_source.rb +0 -213
- data/lib/rubocop/string_util.rb +0 -14
- data/lib/rubocop/token.rb +0 -114
@@ -81,9 +81,7 @@ module RuboCop
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def each_ancestor(include_self: false, &block)
|
84
|
-
unless block_given?
|
85
|
-
return to_enum(__method__, include_self: include_self)
|
86
|
-
end
|
84
|
+
return to_enum(__method__, include_self: include_self) unless block_given?
|
87
85
|
|
88
86
|
yield self if include_self
|
89
87
|
scan_ancestors(&block)
|
@@ -11,6 +11,7 @@ module RuboCop
|
|
11
11
|
|
12
12
|
attr_reader :name, :declaration_node, :scope,
|
13
13
|
:assignments, :references, :captured_by_block
|
14
|
+
|
14
15
|
alias captured_by_block? captured_by_block
|
15
16
|
|
16
17
|
def initialize(name, declaration_node, scope)
|
@@ -46,9 +47,7 @@ module RuboCop
|
|
46
47
|
@assignments.reverse_each do |assignment|
|
47
48
|
next if consumed_branches.include?(assignment.branch)
|
48
49
|
|
49
|
-
unless assignment.run_exclusively_with?(reference)
|
50
|
-
assignment.reference!(node)
|
51
|
-
end
|
50
|
+
assignment.reference!(node) unless assignment.run_exclusively_with?(reference)
|
52
51
|
|
53
52
|
# Modifier if/unless conditions are special. Assignments made in
|
54
53
|
# them do not put the assigned variable in scope to the left of the
|
@@ -59,9 +58,7 @@ module RuboCop
|
|
59
58
|
|
60
59
|
break if !assignment.branch || assignment.branch == reference.branch
|
61
60
|
|
62
|
-
unless assignment.branch.may_run_incompletely?
|
63
|
-
consumed_branches << assignment.branch
|
64
|
-
end
|
61
|
+
consumed_branches << assignment.branch unless assignment.branch.may_run_incompletely?
|
65
62
|
end
|
66
63
|
end
|
67
64
|
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Ext
|
5
|
+
# Extensions to AST::ProcessedSource for our cached comment_config
|
6
|
+
module ProcessedSource
|
7
|
+
def comment_config
|
8
|
+
@comment_config ||= CommentConfig.new(self)
|
9
|
+
end
|
10
|
+
|
11
|
+
def disabled_line_ranges
|
12
|
+
comment_config.cop_disabled_line_ranges
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
RuboCop::ProcessedSource.include RuboCop::Ext::ProcessedSource
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# rubocop:disable Layout/LineLength
|
4
|
-
|
5
3
|
module RuboCop
|
6
4
|
module Formatter
|
7
5
|
# Abstract base class for formatter, implements all public API methods.
|
@@ -41,8 +39,6 @@ module RuboCop
|
|
41
39
|
# * `#finished`
|
42
40
|
#
|
43
41
|
class BaseFormatter
|
44
|
-
# rubocop:enable Layout/LineLength
|
45
|
-
|
46
42
|
# @api public
|
47
43
|
#
|
48
44
|
# @!attribute [r] output
|
@@ -59,9 +59,7 @@ module RuboCop
|
|
59
59
|
def command
|
60
60
|
command = 'rubocop --auto-gen-config'
|
61
61
|
|
62
|
-
if @options[:auto_gen_only_exclude]
|
63
|
-
command += ' --auto-gen-only-exclude'
|
64
|
-
end
|
62
|
+
command += ' --auto-gen-only-exclude' if @options[:auto_gen_only_exclude]
|
65
63
|
|
66
64
|
if @exclude_limit_option
|
67
65
|
command +=
|
@@ -70,15 +68,13 @@ module RuboCop
|
|
70
68
|
end
|
71
69
|
command += ' --no-offense-counts' if @options[:no_offense_counts]
|
72
70
|
|
73
|
-
if @options[:no_auto_gen_timestamp]
|
74
|
-
command += ' --no-auto-gen-timestamp'
|
75
|
-
end
|
71
|
+
command += ' --no-auto-gen-timestamp' if @options[:no_auto_gen_timestamp]
|
76
72
|
|
77
73
|
command
|
78
74
|
end
|
79
75
|
|
80
76
|
def timestamp
|
81
|
-
@options[:no_auto_gen_timestamp] ? '' : "on #{Time.now} "
|
77
|
+
@options[:no_auto_gen_timestamp] ? '' : "on #{Time.now.utc} "
|
82
78
|
end
|
83
79
|
|
84
80
|
def output_offenses
|
@@ -116,14 +112,10 @@ module RuboCop
|
|
116
112
|
end
|
117
113
|
|
118
114
|
def output_cop_comments(output_buffer, cfg, cop_name, offense_count)
|
119
|
-
if @show_offense_counts
|
120
|
-
output_buffer.puts "# Offense count: #{offense_count}"
|
121
|
-
end
|
115
|
+
output_buffer.puts "# Offense count: #{offense_count}" if @show_offense_counts
|
122
116
|
|
123
117
|
cop_class = Cop::Cop.registry.find_by_cop_name(cop_name)
|
124
|
-
if cop_class&.new&.support_autocorrect?
|
125
|
-
output_buffer.puts '# Cop supports --auto-correct.'
|
126
|
-
end
|
118
|
+
output_buffer.puts '# Cop supports --auto-correct.' if cop_class&.new&.support_autocorrect?
|
127
119
|
|
128
120
|
default_cfg = default_config(cop_name)
|
129
121
|
return unless default_cfg
|
@@ -82,14 +82,12 @@ module RuboCop
|
|
82
82
|
|
83
83
|
def builtin_formatter_class(specified_key)
|
84
84
|
matching_keys = BUILTIN_FORMATTERS_FOR_KEYS.keys.select do |key|
|
85
|
-
|
85
|
+
/^\[#{specified_key}\]/.match?(key) || specified_key == key.delete('[]')
|
86
86
|
end
|
87
87
|
|
88
88
|
raise %(No formatter for "#{specified_key}") if matching_keys.empty?
|
89
89
|
|
90
|
-
if matching_keys.size > 1
|
91
|
-
raise %(Cannot determine formatter for "#{specified_key}")
|
92
|
-
end
|
90
|
+
raise %(Cannot determine formatter for "#{specified_key}") if matching_keys.size > 1
|
93
91
|
|
94
92
|
BUILTIN_FORMATTERS_FOR_KEYS[matching_keys.first]
|
95
93
|
end
|
@@ -35,19 +35,29 @@ module RuboCop
|
|
35
35
|
#
|
36
36
|
# In the future, it would be preferable to return only enabled cops.
|
37
37
|
Cop::Cop.all.each do |cop|
|
38
|
+
target_offenses = offenses_for_cop(offenses, cop)
|
39
|
+
|
40
|
+
next unless relevant_for_output?(options, target_offenses)
|
41
|
+
|
38
42
|
REXML::Element.new('testcase', @testsuite).tap do |testcase|
|
39
43
|
testcase.attributes['classname'] = classname_attribute_value(file)
|
40
44
|
testcase.attributes['name'] = cop.cop_name
|
41
45
|
|
42
|
-
target_offenses = offenses.select do |offense|
|
43
|
-
offense.cop_name == cop.cop_name
|
44
|
-
end
|
45
|
-
|
46
46
|
add_failure_to(testcase, target_offenses, cop.cop_name)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
def relevant_for_output?(options, target_offenses)
|
52
|
+
!options[:display_only_failed] || target_offenses.any?
|
53
|
+
end
|
54
|
+
|
55
|
+
def offenses_for_cop(all_offenses, cop)
|
56
|
+
all_offenses.select do |offense|
|
57
|
+
offense.cop_name == cop.cop_name
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
51
61
|
def classname_attribute_value(file)
|
52
62
|
file.gsub(/\.rb\Z/, '').gsub("#{Dir.pwd}/", '').tr('/', '.')
|
53
63
|
end
|
@@ -133,7 +133,7 @@ module RuboCop
|
|
133
133
|
# @see https://www.gnu.org/software/emacs/manual/html_node/emacs/Specify-Coding.html
|
134
134
|
# @see https://git.io/vMCXh Emacs handling in Ruby's parse.y
|
135
135
|
class EmacsComment < EditorComment
|
136
|
-
FORMAT =
|
136
|
+
FORMAT = /-\*-(.+)-\*-/.freeze
|
137
137
|
SEPARATOR = ';'
|
138
138
|
OPERATOR = ':'
|
139
139
|
|
@@ -3,19 +3,28 @@
|
|
3
3
|
module RuboCop
|
4
4
|
# Common functionality for finding names that are similar to a given name.
|
5
5
|
module NameSimilarity
|
6
|
-
|
6
|
+
module_function
|
7
7
|
|
8
|
-
def find_similar_name(target_name,
|
9
|
-
|
8
|
+
def find_similar_name(target_name, names)
|
9
|
+
similar_names = find_similar_names(target_name, names)
|
10
|
+
|
11
|
+
similar_names.first
|
12
|
+
end
|
13
|
+
|
14
|
+
def find_similar_names(target_name, names)
|
15
|
+
# DidYouMean::SpellChecker is not available in all versions of Ruby, and
|
16
|
+
# even on versions where it *is* available (>= 2.3), it is not always
|
17
|
+
# required correctly. So we do a feature check first.
|
18
|
+
# See: https://github.com/rubocop-hq/rubocop/issues/7979
|
19
|
+
return [] unless defined?(DidYouMean::SpellChecker)
|
20
|
+
|
21
|
+
names = names.dup
|
10
22
|
names.delete(target_name)
|
11
23
|
|
12
|
-
|
13
|
-
|
14
|
-
hash[name] = score if score >= MINIMUM_SIMILARITY_TO_SUGGEST
|
15
|
-
end
|
24
|
+
spell_checker = DidYouMean::SpellChecker.new(dictionary: names)
|
25
|
+
similar_names = spell_checker.correct(target_name)
|
16
26
|
|
17
|
-
|
18
|
-
most_similar_name
|
27
|
+
similar_names
|
19
28
|
end
|
20
29
|
end
|
21
30
|
end
|
data/lib/rubocop/options.rb
CHANGED
@@ -83,6 +83,12 @@ module RuboCop
|
|
83
83
|
|
84
84
|
def add_cop_selection_csv_option(option, opts)
|
85
85
|
option(opts, "--#{option} [COP1,COP2,...]") do |list|
|
86
|
+
unless list
|
87
|
+
message = "--#{option} argument should be [COP1,COP2,...]."
|
88
|
+
|
89
|
+
raise OptionArgumentError, message
|
90
|
+
end
|
91
|
+
|
86
92
|
@options[:"#{option}"] =
|
87
93
|
if list.empty?
|
88
94
|
['']
|
@@ -97,6 +103,7 @@ module RuboCop
|
|
97
103
|
def add_configuration_options(opts)
|
98
104
|
option(opts, '-c', '--config FILE')
|
99
105
|
option(opts, '--force-exclusion')
|
106
|
+
option(opts, '--only-recognized-file-types')
|
100
107
|
option(opts, '--ignore-parent-exclusion')
|
101
108
|
option(opts, '--force-default-config')
|
102
109
|
add_auto_gen_options(opts)
|
@@ -136,6 +143,8 @@ module RuboCop
|
|
136
143
|
@options[:output_path] = path
|
137
144
|
end
|
138
145
|
end
|
146
|
+
|
147
|
+
option(opts, '--display-only-failed')
|
139
148
|
end
|
140
149
|
|
141
150
|
def add_severity_option(opts)
|
@@ -241,10 +250,7 @@ module RuboCop
|
|
241
250
|
def format_message_from(name, cop_names)
|
242
251
|
message = 'Unrecognized cop or department: %<name>s.'
|
243
252
|
message_with_candidate = "%<message>s\nDid you mean? %<candidate>s"
|
244
|
-
corrections =
|
245
|
-
score = StringUtil.similarity(cn, name)
|
246
|
-
score >= NameSimilarity::MINIMUM_SIMILARITY_TO_SUGGEST
|
247
|
-
end.sort
|
253
|
+
corrections = NameSimilarity.find_similar_names(name, cop_names)
|
248
254
|
|
249
255
|
if corrections.empty?
|
250
256
|
format(message, name: name)
|
@@ -271,9 +277,7 @@ module RuboCop
|
|
271
277
|
raise OptionArgumentError, 'Lint/RedundantCopDisableDirective cannot ' \
|
272
278
|
'be used with --only.'
|
273
279
|
end
|
274
|
-
if except_syntax?
|
275
|
-
raise OptionArgumentError, 'Syntax checking cannot be turned off.'
|
276
|
-
end
|
280
|
+
raise OptionArgumentError, 'Syntax checking cannot be turned off.' if except_syntax?
|
277
281
|
unless boolean_or_empty_cache?
|
278
282
|
raise OptionArgumentError, '-C/--cache argument must be true or false'
|
279
283
|
end
|
@@ -284,6 +288,7 @@ module RuboCop
|
|
284
288
|
end
|
285
289
|
validate_auto_gen_config
|
286
290
|
validate_auto_correct
|
291
|
+
validate_display_only_failed
|
287
292
|
validate_parallel
|
288
293
|
|
289
294
|
return if incompatible_options.size <= 1
|
@@ -307,13 +312,20 @@ module RuboCop
|
|
307
312
|
end
|
308
313
|
end
|
309
314
|
|
315
|
+
def validate_display_only_failed
|
316
|
+
return unless @options.key?(:display_only_failed)
|
317
|
+
return if @options[:format] == 'junit'
|
318
|
+
|
319
|
+
raise OptionArgumentError,
|
320
|
+
format('--display-only-failed can only be used together with --format junit.')
|
321
|
+
end
|
322
|
+
|
310
323
|
def validate_auto_correct
|
311
324
|
return if @options.key?(:auto_correct)
|
312
325
|
return unless @options.key?(:disable_uncorrectable)
|
313
326
|
|
314
327
|
raise OptionArgumentError,
|
315
|
-
format('
|
316
|
-
flag: '--disable-uncorrectable')
|
328
|
+
format('--disable-uncorrectable can only be used together with --auto-correct.')
|
317
329
|
end
|
318
330
|
|
319
331
|
def validate_parallel
|
@@ -377,7 +389,6 @@ module RuboCop
|
|
377
389
|
# This module contains help texts for command line options.
|
378
390
|
module OptionsHelp
|
379
391
|
MAX_EXCL = RuboCop::Options::DEFAULT_MAXIMUM_EXCLUSION_ITEMS.to_s
|
380
|
-
# rubocop:disable Layout/LineLength
|
381
392
|
FORMATTER_OPTION_LIST = RuboCop::Formatter::FormatterSet::BUILTIN_FORMATTERS_FOR_KEYS.keys
|
382
393
|
|
383
394
|
TEXT = {
|
@@ -409,6 +420,9 @@ module RuboCop
|
|
409
420
|
force_exclusion: ['Force excluding files specified in the',
|
410
421
|
'configuration `Exclude` even if they are',
|
411
422
|
'explicitly passed as arguments.'],
|
423
|
+
only_recognized_file_types: ['Inspect files given on the command line only if',
|
424
|
+
'they are listed in AllCops/Include parameters',
|
425
|
+
'of user configuration or default configuration.'],
|
412
426
|
ignore_disable_comments: ['Run cops even when they are disabled locally',
|
413
427
|
'with a comment.'],
|
414
428
|
ignore_parent_exclusion: ['Prevent from inheriting AllCops/Exclude from',
|
@@ -427,6 +441,8 @@ module RuboCop
|
|
427
441
|
'if no format is specified.'],
|
428
442
|
fail_level: ['Minimum severity (A/R/C/W/E/F) for exit',
|
429
443
|
'with error code.'],
|
444
|
+
display_only_failed: ['Only output offense messages. Omit passing',
|
445
|
+
'cops. Only valid for --format junit.'],
|
430
446
|
display_only_fail_level_offenses:
|
431
447
|
['Only output offense messages at',
|
432
448
|
'the specified --fail-level or above'],
|
@@ -461,6 +477,5 @@ module RuboCop
|
|
461
477
|
'reports. This is useful for editor integration.'],
|
462
478
|
init: 'Generate a .rubocop.yml file in the current directory.'
|
463
479
|
}.freeze
|
464
|
-
# rubocop:enable Layout/LineLength
|
465
480
|
end
|
466
481
|
end
|
data/lib/rubocop/path_util.rb
CHANGED
@@ -40,7 +40,7 @@ module RuboCop
|
|
40
40
|
hidden_file_in_not_hidden_dir?(pattern, path)
|
41
41
|
when Regexp
|
42
42
|
begin
|
43
|
-
path
|
43
|
+
pattern.match?(path)
|
44
44
|
rescue ArgumentError => e
|
45
45
|
return false if e.message.start_with?('invalid byte sequence')
|
46
46
|
|
@@ -51,7 +51,7 @@ module RuboCop
|
|
51
51
|
|
52
52
|
# Returns true for an absolute Unix or Windows path.
|
53
53
|
def absolute?(path)
|
54
|
-
|
54
|
+
%r{\A([A-Z]:)?/}i.match?(path)
|
55
55
|
end
|
56
56
|
|
57
57
|
def self.pwd
|
data/lib/rubocop/platform.rb
CHANGED
@@ -56,9 +56,7 @@ module RuboCop
|
|
56
56
|
def generate_request(uri)
|
57
57
|
request = Net::HTTP::Get.new(uri.request_uri)
|
58
58
|
|
59
|
-
if cache_path_exists?
|
60
|
-
request['If-Modified-Since'] = File.stat(cache_path).mtime.rfc2822
|
61
|
-
end
|
59
|
+
request['If-Modified-Since'] = File.stat(cache_path).mtime.rfc2822 if cache_path_exists?
|
62
60
|
|
63
61
|
yield request
|
64
62
|
end
|
data/lib/rubocop/result_cache.rb
CHANGED
@@ -33,16 +33,14 @@ module RuboCop
|
|
33
33
|
|
34
34
|
def requires_file_removal?(file_count, config_store)
|
35
35
|
file_count > 1 &&
|
36
|
-
file_count > config_store.
|
36
|
+
file_count > config_store.for_dir('.').for_all_cops['MaxFilesInCache']
|
37
37
|
end
|
38
38
|
|
39
39
|
def remove_oldest_files(files, dirs, cache_root, verbose)
|
40
40
|
# Add 1 to half the number of files, so that we remove the file if
|
41
41
|
# there's only 1 left.
|
42
42
|
remove_count = 1 + files.length / 2
|
43
|
-
if verbose
|
44
|
-
puts "Removing the #{remove_count} oldest files from #{cache_root}"
|
45
|
-
end
|
43
|
+
puts "Removing the #{remove_count} oldest files from #{cache_root}" if verbose
|
46
44
|
sorted = files.sort_by { |path| File.mtime(path) }
|
47
45
|
remove_files(sorted, dirs, remove_count)
|
48
46
|
rescue Errno::ENOENT
|
@@ -62,7 +60,7 @@ module RuboCop
|
|
62
60
|
end
|
63
61
|
|
64
62
|
def self.cache_root(config_store)
|
65
|
-
root = config_store.
|
63
|
+
root = config_store.for_dir('.').for_all_cops['CacheRootDirectory']
|
66
64
|
root ||= if ENV.key?('XDG_CACHE_HOME')
|
67
65
|
# Include user ID in the path to make sure the user has write
|
68
66
|
# access.
|
@@ -74,7 +72,7 @@ module RuboCop
|
|
74
72
|
end
|
75
73
|
|
76
74
|
def self.allow_symlinks_in_cache_location?(config_store)
|
77
|
-
config_store.
|
75
|
+
config_store.for_dir('.').for_all_cops['AllowSymlinksInCacheRootDirectory']
|
78
76
|
end
|
79
77
|
|
80
78
|
def initialize(file, team, options, config_store, cache_root = nil)
|
@@ -145,7 +143,7 @@ module RuboCop
|
|
145
143
|
digester = Digest::SHA1.new
|
146
144
|
mode = File.stat(file).mode
|
147
145
|
digester.update(
|
148
|
-
"#{file}#{mode}#{config_store.
|
146
|
+
"#{file}#{mode}#{config_store.for_file(file).signature}"
|
149
147
|
)
|
150
148
|
digester.file(file)
|
151
149
|
digester.hexdigest
|
@@ -48,32 +48,9 @@ module CopHelper
|
|
48
48
|
corrector.rewrite
|
49
49
|
end
|
50
50
|
|
51
|
-
def autocorrect_source_with_loop(source, file = nil)
|
52
|
-
cnt = 0
|
53
|
-
loop do
|
54
|
-
cop.instance_variable_set(:@corrections, [])
|
55
|
-
new_source = autocorrect_source(source, file)
|
56
|
-
return new_source if new_source == source
|
57
|
-
|
58
|
-
source = new_source
|
59
|
-
cnt += 1
|
60
|
-
if cnt > RuboCop::Runner::MAX_ITERATIONS
|
61
|
-
raise RuboCop::Runner::InfiniteCorrectionLoop.new(file, [])
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
51
|
def _investigate(cop, processed_source)
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
instances << klass.new([cop])
|
71
|
-
end
|
72
|
-
|
73
|
-
commissioner =
|
74
|
-
RuboCop::Cop::Commissioner.new([cop], forces, raise_error: true)
|
75
|
-
commissioner.investigate(processed_source)
|
76
|
-
commissioner
|
52
|
+
team = RuboCop::Cop::Team.new([cop], nil, raise_error: true)
|
53
|
+
team.inspect_file(processed_source)
|
77
54
|
end
|
78
55
|
end
|
79
56
|
|