rubocop 0.92.0 → 0.93.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 +1 -1
- data/config/default.yml +32 -0
- data/lib/rubocop.rb +3 -1
- data/lib/rubocop/cached_data.rb +2 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +2 -2
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +10 -10
- data/lib/rubocop/cop/layout/dot_position.rb +6 -9
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +6 -7
- data/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb +2 -11
- data/lib/rubocop/cop/layout/space_inside_block_braces.rb +0 -4
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +2 -0
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +15 -1
- data/lib/rubocop/cop/lint/boolean_symbol.rb +3 -0
- data/lib/rubocop/cop/lint/hash_compare_by_identity.rb +37 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
- data/lib/rubocop/cop/lint/redundant_safe_navigation.rb +45 -0
- data/lib/rubocop/cop/metrics/block_length.rb +3 -1
- data/lib/rubocop/cop/metrics/class_length.rb +8 -6
- data/lib/rubocop/cop/mixin/hash_transform_method.rb +1 -1
- data/lib/rubocop/cop/offense.rb +15 -2
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +6 -2
- data/lib/rubocop/cop/style/accessor_grouping.rb +3 -0
- data/lib/rubocop/cop/style/case_like_if.rb +20 -4
- data/lib/rubocop/cop/style/class_equality_comparison.rb +49 -0
- data/lib/rubocop/cop/style/combinable_loops.rb +8 -1
- data/lib/rubocop/cop/style/comment_annotation.rb +6 -0
- data/lib/rubocop/cop/style/explicit_block_argument.rb +6 -2
- data/lib/rubocop/cop/style/for.rb +0 -4
- data/lib/rubocop/cop/style/format_string_token.rb +1 -1
- data/lib/rubocop/cop/style/method_def_parentheses.rb +0 -4
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -0
- data/lib/rubocop/cop/style/raise_args.rb +0 -3
- data/lib/rubocop/cop/style/redundant_begin.rb +26 -8
- data/lib/rubocop/cop/style/redundant_condition.rb +5 -1
- data/lib/rubocop/cop/style/redundant_interpolation.rb +6 -1
- data/lib/rubocop/cop/style/redundant_regexp_character_class.rb +39 -24
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +8 -15
- data/lib/rubocop/cop/style/string_concatenation.rb +1 -1
- data/lib/rubocop/cop/variable_force/branch.rb +0 -4
- data/lib/rubocop/ext/regexp_node.rb +20 -4
- data/lib/rubocop/result_cache.rb +8 -2
- data/lib/rubocop/rspec/cop_helper.rb +1 -1
- data/lib/rubocop/runner.rb +4 -4
- data/lib/rubocop/target_finder.rb +23 -25
- data/lib/rubocop/version.rb +1 -1
- metadata +10 -8
- data/lib/rubocop/cop/mixin/regexp_literal_help.rb +0 -43
| @@ -34,7 +34,6 @@ module RuboCop | |
| 34 34 | 
             
                  #   /[+\-]\d/
         | 
| 35 35 | 
             
                  class RedundantRegexpEscape < Base
         | 
| 36 36 | 
             
                    include RangeHelp
         | 
| 37 | 
            -
                    include RegexpLiteralHelp
         | 
| 38 37 | 
             
                    extend AutoCorrector
         | 
| 39 38 |  | 
| 40 39 | 
             
                    MSG_REDUNDANT_ESCAPE = 'Redundant escape inside regexp literal'
         | 
| @@ -59,9 +58,9 @@ module RuboCop | |
| 59 58 |  | 
| 60 59 | 
             
                    def allowed_escape?(node, char, within_character_class)
         | 
| 61 60 | 
             
                      # Strictly speaking a few single-letter metachars are currently
         | 
| 62 | 
            -
                      # unnecessary to "escape", e.g.  | 
| 61 | 
            +
                      # unnecessary to "escape", e.g. i, E, F, but enumerating them is
         | 
| 63 62 | 
             
                      # rather difficult, and their behaviour could change over time with
         | 
| 64 | 
            -
                      # different versions of Ruby so that e.g. /\ | 
| 63 | 
            +
                      # different versions of Ruby so that e.g. /\i/ != /i/
         | 
| 65 64 | 
             
                      return true if /[[:alnum:]]/.match?(char)
         | 
| 66 65 | 
             
                      return true if ALLOWED_ALWAYS_ESCAPES.include?(char) || delimiter?(node, char)
         | 
| 67 66 |  | 
| @@ -82,19 +81,13 @@ module RuboCop | |
| 82 81 | 
             
                    end
         | 
| 83 82 |  | 
| 84 83 | 
             
                    def each_escape(node)
         | 
| 85 | 
            -
                       | 
| 86 | 
            -
                        [ | 
| 87 | 
            -
             | 
| 88 | 
            -
                        if  | 
| 89 | 
            -
                           | 
| 90 | 
            -
             | 
| 91 | 
            -
                          [nil, char_class_depth]
         | 
| 92 | 
            -
                        elsif previous == '['
         | 
| 93 | 
            -
                          [current, char_class_depth + 1]
         | 
| 94 | 
            -
                        elsif current == ']'
         | 
| 95 | 
            -
                          [current, char_class_depth - 1]
         | 
| 84 | 
            +
                      node.parsed_tree&.traverse&.reduce(0) do |char_class_depth, (event, expr)|
         | 
| 85 | 
            +
                        yield(expr.text[1], expr.ts, !char_class_depth.zero?) if expr.type == :escape
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                        if expr.type == :set
         | 
| 88 | 
            +
                          char_class_depth + (event == :enter ? 1 : -1)
         | 
| 96 89 | 
             
                        else
         | 
| 97 | 
            -
                           | 
| 90 | 
            +
                          char_class_depth
         | 
| 98 91 | 
             
                        end
         | 
| 99 92 | 
             
                      end
         | 
| 100 93 | 
             
                    end
         | 
| @@ -20,8 +20,6 @@ module RuboCop | |
| 20 20 | 
             
                      nil
         | 
| 21 21 | 
             
                    end
         | 
| 22 22 |  | 
| 23 | 
            -
                    # rubocop:disable Metrics/BlockLength
         | 
| 24 | 
            -
             | 
| 25 23 | 
             
                    # Abstract base class for branch classes.
         | 
| 26 24 | 
             
                    # A branch represents a conditional branch in a scope.
         | 
| 27 25 | 
             
                    #
         | 
| @@ -42,8 +40,6 @@ module RuboCop | |
| 42 40 | 
             
                    #     do_something     # no branch
         | 
| 43 41 | 
             
                    #   end
         | 
| 44 42 | 
             
                    Base = Struct.new(:child_node, :scope) do
         | 
| 45 | 
            -
                      # rubocop:enable Metrics/BlockLength
         | 
| 46 | 
            -
             | 
| 47 43 | 
             
                      def self.classes
         | 
| 48 44 | 
             
                        @classes ||= []
         | 
| 49 45 | 
             
                      end
         | 
| @@ -17,11 +17,9 @@ module RuboCop | |
| 17 17 |  | 
| 18 18 | 
             
                  # @return [Regexp::Expression::Root, nil]
         | 
| 19 19 | 
             
                  def parsed_tree
         | 
| 20 | 
            -
                     | 
| 21 | 
            -
             | 
| 22 | 
            -
                    str = content
         | 
| 20 | 
            +
                    str = with_interpolations_blanked
         | 
| 23 21 | 
             
                    Ext::RegexpNode.parsed_cache[str] ||= begin
         | 
| 24 | 
            -
                      Regexp::Parser.parse(str)
         | 
| 22 | 
            +
                      Regexp::Parser.parse(str, options: options)
         | 
| 25 23 | 
             
                    rescue StandardError
         | 
| 26 24 | 
             
                      nil
         | 
| 27 25 | 
             
                    end
         | 
| @@ -40,6 +38,24 @@ module RuboCop | |
| 40 38 | 
             
                    self
         | 
| 41 39 | 
             
                  end
         | 
| 42 40 |  | 
| 41 | 
            +
                  private
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def with_interpolations_blanked
         | 
| 44 | 
            +
                    # Ignore the trailing regopt node
         | 
| 45 | 
            +
                    children[0...-1].map do |child|
         | 
| 46 | 
            +
                      source = child.source
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                      # We don't want to consider the contents of interpolations as part of the pattern source,
         | 
| 49 | 
            +
                      # but need to preserve their width, to allow offsets to correctly line up with the
         | 
| 50 | 
            +
                      # original source: spaces have no effect, and preserve width.
         | 
| 51 | 
            +
                      if child.begin_type?
         | 
| 52 | 
            +
                        ' ' * source.length
         | 
| 53 | 
            +
                      else
         | 
| 54 | 
            +
                        source
         | 
| 55 | 
            +
                      end
         | 
| 56 | 
            +
                    end.join
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 43 59 | 
             
                  AST::RegexpNode.include self
         | 
| 44 60 | 
             
                end
         | 
| 45 61 | 
             
              end
         | 
    
        data/lib/rubocop/result_cache.rb
    CHANGED
    
    | @@ -95,6 +95,11 @@ module RuboCop | |
| 95 95 | 
             
                                    context_checksum(team, options),
         | 
| 96 96 | 
             
                                    file_checksum(file, config_store))
         | 
| 97 97 | 
             
                  @cached_data = CachedData.new(file)
         | 
| 98 | 
            +
                  @debug = options[:debug]
         | 
| 99 | 
            +
                end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
                def debug?
         | 
| 102 | 
            +
                  @debug
         | 
| 98 103 | 
             
                end
         | 
| 99 104 |  | 
| 100 105 | 
             
                def valid?
         | 
| @@ -102,6 +107,7 @@ module RuboCop | |
| 102 107 | 
             
                end
         | 
| 103 108 |  | 
| 104 109 | 
             
                def load
         | 
| 110 | 
            +
                  puts "Loading cache from #{@path}" if debug?
         | 
| 105 111 | 
             
                  @cached_data.from_json(IO.read(@path, encoding: Encoding::UTF_8))
         | 
| 106 112 | 
             
                end
         | 
| 107 113 |  | 
| @@ -209,8 +215,8 @@ module RuboCop | |
| 209 215 | 
             
                # The external dependency checksums are cached per RuboCop team so that
         | 
| 210 216 | 
             
                # the checksums don't need to be recomputed for each file.
         | 
| 211 217 | 
             
                def team_checksum(team)
         | 
| 212 | 
            -
                  @checksum_by_team ||= {}
         | 
| 213 | 
            -
                  @checksum_by_team[team | 
| 218 | 
            +
                  @checksum_by_team ||= {}.compare_by_identity
         | 
| 219 | 
            +
                  @checksum_by_team[team] ||= team.external_dependency_checksum
         | 
| 214 220 | 
             
                end
         | 
| 215 221 |  | 
| 216 222 | 
             
                # We combine team and options into a single "context" checksum to avoid
         | 
    
        data/lib/rubocop/runner.rb
    CHANGED
    
    | @@ -324,8 +324,8 @@ module RuboCop | |
| 324 324 | 
             
                end
         | 
| 325 325 |  | 
| 326 326 | 
             
                def mobilized_cop_classes(config)
         | 
| 327 | 
            -
                  @mobilized_cop_classes ||= {}
         | 
| 328 | 
            -
                  @mobilized_cop_classes[config | 
| 327 | 
            +
                  @mobilized_cop_classes ||= {}.compare_by_identity
         | 
| 328 | 
            +
                  @mobilized_cop_classes[config] ||= begin
         | 
| 329 329 | 
             
                    cop_classes = Cop::Registry.all
         | 
| 330 330 |  | 
| 331 331 | 
             
                    OptionsValidator.new(@options).validate_cop_options
         | 
| @@ -399,8 +399,8 @@ module RuboCop | |
| 399 399 | 
             
                # otherwise dormant team that can be used for config- and option-
         | 
| 400 400 | 
             
                # level caching in ResultCache.
         | 
| 401 401 | 
             
                def standby_team(config)
         | 
| 402 | 
            -
                  @team_by_config ||= {}
         | 
| 403 | 
            -
                  @team_by_config[config | 
| 402 | 
            +
                  @team_by_config ||= {}.compare_by_identity
         | 
| 403 | 
            +
                  @team_by_config[config] ||=
         | 
| 404 404 | 
             
                    Cop::Team.mobilize(mobilized_cop_classes(config), config, @options)
         | 
| 405 405 | 
             
                end
         | 
| 406 406 | 
             
              end
         | 
| @@ -81,34 +81,32 @@ module RuboCop | |
| 81 81 | 
             
                # the top level directories that are excluded in configuration in the
         | 
| 82 82 | 
             
                # normal way (dir/**/*).
         | 
| 83 83 | 
             
                def find_files(base_dir, flags)
         | 
| 84 | 
            -
                   | 
| 85 | 
            -
             | 
| 86 | 
            -
                   | 
| 87 | 
            -
             | 
| 88 | 
            -
                   | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 84 | 
            +
                  # get all wanted directories first to improve speed of finding all files
         | 
| 85 | 
            +
                  exclude_pattern = combined_exclude_glob_patterns(base_dir)
         | 
| 86 | 
            +
                  dir_flags = flags | File::FNM_PATHNAME | File::FNM_EXTGLOB
         | 
| 87 | 
            +
                  patterns = wanted_dir_patterns(base_dir, exclude_pattern, dir_flags)
         | 
| 88 | 
            +
                  patterns.map! { |dir| File.join(dir, '*') }
         | 
| 89 | 
            +
                  # We need this special case to avoid creating the pattern
         | 
| 90 | 
            +
                  # /**/* which searches the entire file system.
         | 
| 91 | 
            +
                  patterns = [File.join(dir, '**/*')] if patterns.empty?
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  Dir.glob(patterns, flags).select { |path| FileTest.file?(path) }
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                def wanted_dir_patterns(base_dir, exclude_pattern, flags)
         | 
| 97 | 
            +
                  dirs = Dir.glob(File.join(base_dir, '*/'), flags)
         | 
| 98 | 
            +
                            .reject do |dir|
         | 
| 99 | 
            +
                              dir.end_with?('/./', '/../') || File.fnmatch?(exclude_pattern, dir, flags)
         | 
| 96 100 | 
             
                            end
         | 
| 97 | 
            -
                   | 
| 101 | 
            +
                  dirs.flat_map { |dir| wanted_dir_patterns(dir, exclude_pattern, flags) }
         | 
| 102 | 
            +
                      .unshift(base_dir)
         | 
| 98 103 | 
             
                end
         | 
| 99 104 |  | 
| 100 | 
            -
                def  | 
| 101 | 
            -
                   | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
                def excluded_dirs(base_dir)
         | 
| 107 | 
            -
                  all_cops_config = @config_store.for(base_dir).for_all_cops
         | 
| 108 | 
            -
                  dir_tree_excludes = all_cops_config['Exclude'].select do |pattern|
         | 
| 109 | 
            -
                    pattern.is_a?(String) && pattern.end_with?('/**/*')
         | 
| 110 | 
            -
                  end
         | 
| 111 | 
            -
                  dir_tree_excludes.map { |pattern| pattern.sub(%r{/\*\*/\*$}, '') }
         | 
| 105 | 
            +
                def combined_exclude_glob_patterns(base_dir)
         | 
| 106 | 
            +
                  exclude = @config_store.for(base_dir).for_all_cops['Exclude']
         | 
| 107 | 
            +
                  patterns = exclude.select { |pattern| pattern.is_a?(String) && pattern.end_with?('/**/*') }
         | 
| 108 | 
            +
                                    .map { |pattern| pattern.sub("#{base_dir}/", '') }
         | 
| 109 | 
            +
                  "#{base_dir}/{#{patterns.join(',')}}"
         | 
| 112 110 | 
             
                end
         | 
| 113 111 |  | 
| 114 112 | 
             
                def ruby_extension?(file)
         | 
    
        data/lib/rubocop/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rubocop
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.93.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Bozhidar Batsov
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: exe
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date: 2020- | 
| 13 | 
            +
            date: 2020-10-08 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies:
         | 
| 15 15 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 16 16 | 
             
              name: parallel
         | 
| @@ -66,14 +66,14 @@ dependencies: | |
| 66 66 | 
             
                requirements:
         | 
| 67 67 | 
             
                - - ">="
         | 
| 68 68 | 
             
                  - !ruby/object:Gem::Version
         | 
| 69 | 
            -
                    version: '1. | 
| 69 | 
            +
                    version: '1.8'
         | 
| 70 70 | 
             
              type: :runtime
         | 
| 71 71 | 
             
              prerelease: false
         | 
| 72 72 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 73 | 
             
                requirements:
         | 
| 74 74 | 
             
                - - ">="
         | 
| 75 75 | 
             
                  - !ruby/object:Gem::Version
         | 
| 76 | 
            -
                    version: '1. | 
| 76 | 
            +
                    version: '1.8'
         | 
| 77 77 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 78 78 | 
             
              name: rexml
         | 
| 79 79 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -94,14 +94,14 @@ dependencies: | |
| 94 94 | 
             
                requirements:
         | 
| 95 95 | 
             
                - - ">="
         | 
| 96 96 | 
             
                  - !ruby/object:Gem::Version
         | 
| 97 | 
            -
                    version: 0. | 
| 97 | 
            +
                    version: 0.6.0
         | 
| 98 98 | 
             
              type: :runtime
         | 
| 99 99 | 
             
              prerelease: false
         | 
| 100 100 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 101 101 | 
             
                requirements:
         | 
| 102 102 | 
             
                - - ">="
         | 
| 103 103 | 
             
                  - !ruby/object:Gem::Version
         | 
| 104 | 
            -
                    version: 0. | 
| 104 | 
            +
                    version: 0.6.0
         | 
| 105 105 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 106 106 | 
             
              name: ruby-progressbar
         | 
| 107 107 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -367,6 +367,7 @@ files: | |
| 367 367 | 
             
            - lib/rubocop/cop/lint/float_comparison.rb
         | 
| 368 368 | 
             
            - lib/rubocop/cop/lint/float_out_of_range.rb
         | 
| 369 369 | 
             
            - lib/rubocop/cop/lint/format_parameter_mismatch.rb
         | 
| 370 | 
            +
            - lib/rubocop/cop/lint/hash_compare_by_identity.rb
         | 
| 370 371 | 
             
            - lib/rubocop/cop/lint/heredoc_method_call_position.rb
         | 
| 371 372 | 
             
            - lib/rubocop/cop/lint/identity_comparison.rb
         | 
| 372 373 | 
             
            - lib/rubocop/cop/lint/implicit_string_concatenation.rb
         | 
| @@ -396,6 +397,7 @@ files: | |
| 396 397 | 
             
            - lib/rubocop/cop/lint/redundant_cop_disable_directive.rb
         | 
| 397 398 | 
             
            - lib/rubocop/cop/lint/redundant_cop_enable_directive.rb
         | 
| 398 399 | 
             
            - lib/rubocop/cop/lint/redundant_require_statement.rb
         | 
| 400 | 
            +
            - lib/rubocop/cop/lint/redundant_safe_navigation.rb
         | 
| 399 401 | 
             
            - lib/rubocop/cop/lint/redundant_splat_expansion.rb
         | 
| 400 402 | 
             
            - lib/rubocop/cop/lint/redundant_string_coercion.rb
         | 
| 401 403 | 
             
            - lib/rubocop/cop/lint/redundant_with_index.rb
         | 
| @@ -501,7 +503,6 @@ files: | |
| 501 503 | 
             
            - lib/rubocop/cop/mixin/preferred_delimiters.rb
         | 
| 502 504 | 
             
            - lib/rubocop/cop/mixin/range_help.rb
         | 
| 503 505 | 
             
            - lib/rubocop/cop/mixin/rational_literal.rb
         | 
| 504 | 
            -
            - lib/rubocop/cop/mixin/regexp_literal_help.rb
         | 
| 505 506 | 
             
            - lib/rubocop/cop/mixin/rescue_node.rb
         | 
| 506 507 | 
             
            - lib/rubocop/cop/mixin/safe_assignment.rb
         | 
| 507 508 | 
             
            - lib/rubocop/cop/mixin/space_after_punctuation.rb
         | 
| @@ -559,6 +560,7 @@ files: | |
| 559 560 | 
             
            - lib/rubocop/cop/style/character_literal.rb
         | 
| 560 561 | 
             
            - lib/rubocop/cop/style/class_and_module_children.rb
         | 
| 561 562 | 
             
            - lib/rubocop/cop/style/class_check.rb
         | 
| 563 | 
            +
            - lib/rubocop/cop/style/class_equality_comparison.rb
         | 
| 562 564 | 
             
            - lib/rubocop/cop/style/class_methods.rb
         | 
| 563 565 | 
             
            - lib/rubocop/cop/style/class_methods_definitions.rb
         | 
| 564 566 | 
             
            - lib/rubocop/cop/style/class_vars.rb
         | 
| @@ -803,7 +805,7 @@ metadata: | |
| 803 805 | 
             
              homepage_uri: https://rubocop.org/
         | 
| 804 806 | 
             
              changelog_uri: https://github.com/rubocop-hq/rubocop/blob/master/CHANGELOG.md
         | 
| 805 807 | 
             
              source_code_uri: https://github.com/rubocop-hq/rubocop/
         | 
| 806 | 
            -
              documentation_uri: https://docs.rubocop.org/rubocop/0. | 
| 808 | 
            +
              documentation_uri: https://docs.rubocop.org/rubocop/0.93/
         | 
| 807 809 | 
             
              bug_tracker_uri: https://github.com/rubocop-hq/rubocop/issues
         | 
| 808 810 | 
             
            post_install_message: 
         | 
| 809 811 | 
             
            rdoc_options: []
         | 
| @@ -1,43 +0,0 @@ | |
| 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, /.*/m) # 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
         |