erb_lint 0.7.0 → 0.9.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/lib/erb_lint/cli.rb +3 -5
 - data/lib/erb_lint/corrector.rb +5 -16
 - data/lib/erb_lint/file_loader.rb +2 -8
 - data/lib/erb_lint/linters/rubocop.rb +15 -53
 - data/lib/erb_lint/linters/strict_locals.rb +50 -0
 - data/lib/erb_lint/utils/inline_configs.rb +2 -2
 - data/lib/erb_lint/version.rb +1 -1
 - metadata +4 -7
 - data/lib/erb_lint/utils/offset_corrector.rb +0 -69
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 0eabdfa71b2841fc684663a79233451981e21fcffb175c3ae7a1e0bd8afdc8e4
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: c609b033d3354e27c938ef1972b1ac16c654b1900115bb4f6d6595c384d1cfb5
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: f3686f39426c32119e8a725b8320143b31c48f98969bb6f0135827c5ff7c260d5674cfad5190c2bc75111fd5a76d881e47d7aa18b6b48f3f903f698719601623
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 727473a64473dad0adb3912bc7f7b7e5c84d51c60374f72e93f380d378635848a240e8f1f3f16ec8f88874290e5e16821e8445b882c09cec4c78081db9eb2bda
         
     | 
    
        data/lib/erb_lint/cli.rb
    CHANGED
    
    | 
         @@ -162,7 +162,7 @@ module ERBLint 
     | 
|
| 
       162 
162 
     | 
    
         
             
                    runner.run(processed_source)
         
     | 
| 
       163 
163 
     | 
    
         
             
                    break unless autocorrect? && runner.offenses.any?
         
     | 
| 
       164 
164 
     | 
    
         | 
| 
       165 
     | 
    
         
            -
                    corrector =  
     | 
| 
      
 165 
     | 
    
         
            +
                    corrector = corrector(processed_source, runner.offenses)
         
     | 
| 
       166 
166 
     | 
    
         
             
                    break if corrector.corrections.empty?
         
     | 
| 
       167 
167 
     | 
    
         
             
                    break if processed_source.file_content == corrector.corrected_content
         
     | 
| 
       168 
168 
     | 
    
         | 
| 
         @@ -202,10 +202,8 @@ module ERBLint 
     | 
|
| 
       202 
202 
     | 
    
         
             
                  $stdin.binmode.read.force_encoding(Encoding::UTF_8)
         
     | 
| 
       203 
203 
     | 
    
         
             
                end
         
     | 
| 
       204 
204 
     | 
    
         | 
| 
       205 
     | 
    
         
            -
                def  
     | 
| 
       206 
     | 
    
         
            -
                   
     | 
| 
       207 
     | 
    
         
            -
                  failure!(corrector.diagnostics.join(", ")) if corrector.diagnostics.any?
         
     | 
| 
       208 
     | 
    
         
            -
                  corrector
         
     | 
| 
      
 205 
     | 
    
         
            +
                def corrector(processed_source, offenses)
         
     | 
| 
      
 206 
     | 
    
         
            +
                  ERBLint::Corrector.new(processed_source, offenses)
         
     | 
| 
       209 
207 
     | 
    
         
             
                end
         
     | 
| 
       210 
208 
     | 
    
         | 
| 
       211 
209 
     | 
    
         
             
                def config_filename
         
     | 
    
        data/lib/erb_lint/corrector.rb
    CHANGED
    
    | 
         @@ -7,6 +7,8 @@ module ERBLint 
     | 
|
| 
       7 
7 
     | 
    
         
             
                def initialize(processed_source, offenses)
         
     | 
| 
       8 
8 
     | 
    
         
             
                  @processed_source = processed_source
         
     | 
| 
       9 
9 
     | 
    
         
             
                  @offenses = offenses
         
     | 
| 
      
 10 
     | 
    
         
            +
                  corrector = RuboCop::Cop::Corrector.new(@processed_source.source_buffer)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  correct!(corrector)
         
     | 
| 
       10 
12 
     | 
    
         
             
                  @corrected_content = corrector.rewrite
         
     | 
| 
       11 
13 
     | 
    
         
             
                end
         
     | 
| 
       12 
14 
     | 
    
         | 
| 
         @@ -16,22 +18,9 @@ module ERBLint 
     | 
|
| 
       16 
18 
     | 
    
         
             
                  end.compact
         
     | 
| 
       17 
19 
     | 
    
         
             
                end
         
     | 
| 
       18 
20 
     | 
    
         | 
| 
       19 
     | 
    
         
            -
                def corrector
         
     | 
| 
       20 
     | 
    
         
            -
                   
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                if ::RuboCop::Version::STRING.to_f >= 0.87
         
     | 
| 
       24 
     | 
    
         
            -
                  require "rubocop/cop/legacy/corrector"
         
     | 
| 
       25 
     | 
    
         
            -
                  BASE = ::RuboCop::Cop::Legacy::Corrector
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
                  def diagnostics
         
     | 
| 
       28 
     | 
    
         
            -
                    []
         
     | 
| 
       29 
     | 
    
         
            -
                  end
         
     | 
| 
       30 
     | 
    
         
            -
                else
         
     | 
| 
       31 
     | 
    
         
            -
                  BASE = ::RuboCop::Cop::Corrector
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                  def diagnostics
         
     | 
| 
       34 
     | 
    
         
            -
                    corrector.diagnostics
         
     | 
| 
      
 21 
     | 
    
         
            +
                def correct!(corrector)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  corrections.each do |correction|
         
     | 
| 
      
 23 
     | 
    
         
            +
                    correction.call(corrector)
         
     | 
| 
       35 
24 
     | 
    
         
             
                  end
         
     | 
| 
       36 
25 
     | 
    
         
             
                end
         
     | 
| 
       37 
26 
     | 
    
         
             
              end
         
     | 
    
        data/lib/erb_lint/file_loader.rb
    CHANGED
    
    | 
         @@ -9,14 +9,8 @@ module ERBLint 
     | 
|
| 
       9 
9 
     | 
    
         
             
                  @base_path = base_path
         
     | 
| 
       10 
10 
     | 
    
         
             
                end
         
     | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
                 
     | 
| 
       13 
     | 
    
         
            -
                   
     | 
| 
       14 
     | 
    
         
            -
                    YAML.safe_load(read_content(filename), permitted_classes: [Regexp, Symbol], filename: filename) || {}
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
       16 
     | 
    
         
            -
                else
         
     | 
| 
       17 
     | 
    
         
            -
                  def yaml(filename)
         
     | 
| 
       18 
     | 
    
         
            -
                    YAML.safe_load(read_content(filename), [Regexp, Symbol], [], false, filename) || {}
         
     | 
| 
       19 
     | 
    
         
            -
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
                def yaml(filename)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  YAML.safe_load(read_content(filename), permitted_classes: [Regexp, Symbol], filename: filename) || {}
         
     | 
| 
       20 
14 
     | 
    
         
             
                end
         
     | 
| 
       21 
15 
     | 
    
         | 
| 
       22 
16 
     | 
    
         
             
                private
         
     | 
| 
         @@ -2,7 +2,6 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require "better_html"
         
     | 
| 
       4 
4 
     | 
    
         
             
            require "tempfile"
         
     | 
| 
       5 
     | 
    
         
            -
            require "erb_lint/utils/offset_corrector"
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
6 
     | 
    
         
             
            module ERBLint
         
     | 
| 
       8 
7 
     | 
    
         
             
              module Linters
         
     | 
| 
         @@ -36,30 +35,14 @@ module ERBLint 
     | 
|
| 
       36 
35 
     | 
    
         
             
                    end
         
     | 
| 
       37 
36 
     | 
    
         
             
                  end
         
     | 
| 
       38 
37 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
                   
     | 
| 
       40 
     | 
    
         
            -
                     
     | 
| 
       41 
     | 
    
         
            -
                      return unless offense.context
         
     | 
| 
      
 38 
     | 
    
         
            +
                  def autocorrect(_processed_source, offense)
         
     | 
| 
      
 39 
     | 
    
         
            +
                    return unless offense.context
         
     | 
| 
       42 
40 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
      
 41 
     | 
    
         
            +
                    rubocop_correction = offense.context[:rubocop_correction]
         
     | 
| 
      
 42 
     | 
    
         
            +
                    return unless rubocop_correction
         
     | 
| 
       45 
43 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                      end
         
     | 
| 
       49 
     | 
    
         
            -
                    end
         
     | 
| 
       50 
     | 
    
         
            -
                  else
         
     | 
| 
       51 
     | 
    
         
            -
                    def autocorrect(processed_source, offense)
         
     | 
| 
       52 
     | 
    
         
            -
                      return unless offense.context
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                      lambda do |corrector|
         
     | 
| 
       55 
     | 
    
         
            -
                        passthrough = Utils::OffsetCorrector.new(
         
     | 
| 
       56 
     | 
    
         
            -
                          processed_source,
         
     | 
| 
       57 
     | 
    
         
            -
                          corrector,
         
     | 
| 
       58 
     | 
    
         
            -
                          offense.context[:offset],
         
     | 
| 
       59 
     | 
    
         
            -
                          offense.context[:bound_range],
         
     | 
| 
       60 
     | 
    
         
            -
                        )
         
     | 
| 
       61 
     | 
    
         
            -
                        offense.context[:rubocop_correction].call(passthrough)
         
     | 
| 
       62 
     | 
    
         
            -
                      end
         
     | 
| 
      
 44 
     | 
    
         
            +
                    lambda do |corrector|
         
     | 
| 
      
 45 
     | 
    
         
            +
                      corrector.import!(rubocop_correction, offset: offense.context[:offset])
         
     | 
| 
       63 
46 
     | 
    
         
             
                    end
         
     | 
| 
       64 
47 
     | 
    
         
             
                  end
         
     | 
| 
       65 
48 
     | 
    
         | 
| 
         @@ -85,39 +68,18 @@ module ERBLint 
     | 
|
| 
       85 
68 
     | 
    
         
             
                    activate_team(processed_source, source, offset, code_node, build_team)
         
     | 
| 
       86 
69 
     | 
    
         
             
                  end
         
     | 
| 
       87 
70 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
                   
     | 
| 
       89 
     | 
    
         
            -
                     
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                       
     | 
| 
       92 
     | 
    
         
            -
                        next if rubocop_offense.disabled?
         
     | 
| 
      
 71 
     | 
    
         
            +
                  def activate_team(processed_source, source, offset, code_node, team)
         
     | 
| 
      
 72 
     | 
    
         
            +
                    report = team.investigate(source)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    report.offenses.each do |rubocop_offense|
         
     | 
| 
      
 74 
     | 
    
         
            +
                      next if rubocop_offense.disabled?
         
     | 
| 
       93 
75 
     | 
    
         | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
      
 76 
     | 
    
         
            +
                      correction = rubocop_offense.corrector if rubocop_offense.corrected?
         
     | 
| 
       95 
77 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
      
 78 
     | 
    
         
            +
                      offense_range = processed_source
         
     | 
| 
      
 79 
     | 
    
         
            +
                        .to_source_range(rubocop_offense.location)
         
     | 
| 
      
 80 
     | 
    
         
            +
                        .offset(offset)
         
     | 
| 
       99 
81 
     | 
    
         | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
                      end
         
     | 
| 
       102 
     | 
    
         
            -
                    end
         
     | 
| 
       103 
     | 
    
         
            -
                  else
         
     | 
| 
       104 
     | 
    
         
            -
                    def activate_team(processed_source, source, offset, code_node, team)
         
     | 
| 
       105 
     | 
    
         
            -
                      team.inspect_file(source)
         
     | 
| 
       106 
     | 
    
         
            -
                      team.cops.each do |cop|
         
     | 
| 
       107 
     | 
    
         
            -
                        correction_offset = 0
         
     | 
| 
       108 
     | 
    
         
            -
                        cop.offenses.reject(&:disabled?).each do |rubocop_offense|
         
     | 
| 
       109 
     | 
    
         
            -
                          if rubocop_offense.corrected?
         
     | 
| 
       110 
     | 
    
         
            -
                            correction = cop.corrections[correction_offset]
         
     | 
| 
       111 
     | 
    
         
            -
                            correction_offset += 1
         
     | 
| 
       112 
     | 
    
         
            -
                          end
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                          offense_range = processed_source
         
     | 
| 
       115 
     | 
    
         
            -
                            .to_source_range(rubocop_offense.location)
         
     | 
| 
       116 
     | 
    
         
            -
                            .offset(offset)
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
                          add_offense(rubocop_offense, offense_range, correction, offset, code_node.loc.range)
         
     | 
| 
       119 
     | 
    
         
            -
                        end
         
     | 
| 
       120 
     | 
    
         
            -
                      end
         
     | 
| 
      
 82 
     | 
    
         
            +
                      add_offense(rubocop_offense, offense_range, correction, offset, code_node.loc.range)
         
     | 
| 
       121 
83 
     | 
    
         
             
                    end
         
     | 
| 
       122 
84 
     | 
    
         
             
                  end
         
     | 
| 
       123 
85 
     | 
    
         | 
| 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # frozen_string_literal: true
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module ERBLint
         
     | 
| 
      
 4 
     | 
    
         
            +
              module Linters
         
     | 
| 
      
 5 
     | 
    
         
            +
                # Enforces the use of strict locals in Rails view partial templates.
         
     | 
| 
      
 6 
     | 
    
         
            +
                class StrictLocals < Linter
         
     | 
| 
      
 7 
     | 
    
         
            +
                  include LinterRegistry
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  STRICT_LOCALS_REGEX = /\s+locals:\s+\((.*)\)/
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  def initialize(file_loader, config)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    super
         
     | 
| 
      
 13 
     | 
    
         
            +
                  end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def run(processed_source)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    return unless processed_source.filename.match?(%r{(\A|.*/)_[^/\s]*\.html\.erb\z})
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    file_content = processed_source.file_content
         
     | 
| 
      
 19 
     | 
    
         
            +
                    return if file_content.empty?
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    strict_locals_node = processed_source.ast.descendants(:erb).find do |erb_node|
         
     | 
| 
      
 22 
     | 
    
         
            +
                      indicator_node, _, code_node, _ = *erb_node
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                      indicator_node_str = indicator_node&.deconstruct&.last
         
     | 
| 
      
 25 
     | 
    
         
            +
                      next unless indicator_node_str == "#"
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                      code_node_str = code_node&.deconstruct&.last
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                      code_node_str.match(STRICT_LOCALS_REGEX)
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    unless strict_locals_node
         
     | 
| 
      
 33 
     | 
    
         
            +
                      add_offense(
         
     | 
| 
      
 34 
     | 
    
         
            +
                        processed_source.to_source_range(0...processed_source.file_content.size),
         
     | 
| 
      
 35 
     | 
    
         
            +
                        <<~EOF.chomp,
         
     | 
| 
      
 36 
     | 
    
         
            +
                          Missing strict locals declaration.
         
     | 
| 
      
 37 
     | 
    
         
            +
                          Add <%# locals: () %> at the top of the file to enforce strict locals.
         
     | 
| 
      
 38 
     | 
    
         
            +
                        EOF
         
     | 
| 
      
 39 
     | 
    
         
            +
                      )
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
                  end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                  def autocorrect(_processed_source, offense)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    lambda do |corrector|
         
     | 
| 
      
 45 
     | 
    
         
            +
                      corrector.insert_before(offense.source_range, "<%# locals: () %>\n")
         
     | 
| 
      
 46 
     | 
    
         
            +
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
                  end
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -4,11 +4,11 @@ module ERBLint 
     | 
|
| 
       4 
4 
     | 
    
         
             
              module Utils
         
     | 
| 
       5 
5 
     | 
    
         
             
                class InlineConfigs
         
     | 
| 
       6 
6 
     | 
    
         
             
                  def self.rule_disable_comment_for_lines?(rule, lines)
         
     | 
| 
       7 
     | 
    
         
            -
                    lines.match?(/#  
     | 
| 
      
 7 
     | 
    
         
            +
                    lines.match?(/# erb_?lint:disable (?<rules>.*#{rule}).*/)
         
     | 
| 
       8 
8 
     | 
    
         
             
                  end
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
10 
     | 
    
         
             
                  def self.disabled_rules(line)
         
     | 
| 
       11 
     | 
    
         
            -
                    line.match(/#  
     | 
| 
      
 11 
     | 
    
         
            +
                    line.match(/# erb_?lint:disable (?<rules>.*) %>/)&.named_captures&.fetch("rules")
         
     | 
| 
       12 
12 
     | 
    
         
             
                  end
         
     | 
| 
       13 
13 
     | 
    
         
             
                end
         
     | 
| 
       14 
14 
     | 
    
         
             
              end
         
     | 
    
        data/lib/erb_lint/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,15 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: erb_lint
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.9.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Justin Chan
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Shopify Developers
         
     | 
| 
       9 
     | 
    
         
            -
            autorequire:
         
     | 
| 
       10 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       11 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date:  
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2025-01-20 00:00:00.000000000 Z
         
     | 
| 
       13 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
14 
     | 
    
         
             
              name: activesupport
         
     | 
| 
         @@ -179,6 +178,7 @@ files: 
     | 
|
| 
       179 
178 
     | 
    
         
             
            - lib/erb_lint/linters/space_around_erb_tag.rb
         
     | 
| 
       180 
179 
     | 
    
         
             
            - lib/erb_lint/linters/space_in_html_tag.rb
         
     | 
| 
       181 
180 
     | 
    
         
             
            - lib/erb_lint/linters/space_indentation.rb
         
     | 
| 
      
 181 
     | 
    
         
            +
            - lib/erb_lint/linters/strict_locals.rb
         
     | 
| 
       182 
182 
     | 
    
         
             
            - lib/erb_lint/linters/trailing_whitespace.rb
         
     | 
| 
       183 
183 
     | 
    
         
             
            - lib/erb_lint/offense.rb
         
     | 
| 
       184 
184 
     | 
    
         
             
            - lib/erb_lint/processed_source.rb
         
     | 
| 
         @@ -194,7 +194,6 @@ files: 
     | 
|
| 
       194 
194 
     | 
    
         
             
            - lib/erb_lint/stats.rb
         
     | 
| 
       195 
195 
     | 
    
         
             
            - lib/erb_lint/utils/block_map.rb
         
     | 
| 
       196 
196 
     | 
    
         
             
            - lib/erb_lint/utils/inline_configs.rb
         
     | 
| 
       197 
     | 
    
         
            -
            - lib/erb_lint/utils/offset_corrector.rb
         
     | 
| 
       198 
197 
     | 
    
         
             
            - lib/erb_lint/utils/ruby_to_erb.rb
         
     | 
| 
       199 
198 
     | 
    
         
             
            - lib/erb_lint/utils/severity_levels.rb
         
     | 
| 
       200 
199 
     | 
    
         
             
            - lib/erb_lint/version.rb
         
     | 
| 
         @@ -203,7 +202,6 @@ licenses: 
     | 
|
| 
       203 
202 
     | 
    
         
             
            - MIT
         
     | 
| 
       204 
203 
     | 
    
         
             
            metadata:
         
     | 
| 
       205 
204 
     | 
    
         
             
              allowed_push_host: https://rubygems.org
         
     | 
| 
       206 
     | 
    
         
            -
            post_install_message:
         
     | 
| 
       207 
205 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       208 
206 
     | 
    
         
             
            require_paths:
         
     | 
| 
       209 
207 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -218,8 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       218 
216 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       219 
217 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       220 
218 
     | 
    
         
             
            requirements: []
         
     | 
| 
       221 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
       222 
     | 
    
         
            -
            signing_key:
         
     | 
| 
      
 219 
     | 
    
         
            +
            rubygems_version: 3.6.2
         
     | 
| 
       223 
220 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       224 
221 
     | 
    
         
             
            summary: ERB lint tool
         
     | 
| 
       225 
222 
     | 
    
         
             
            test_files: []
         
     | 
| 
         @@ -1,69 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            module ERBLint
         
     | 
| 
       4 
     | 
    
         
            -
              module Utils
         
     | 
| 
       5 
     | 
    
         
            -
                class OffsetCorrector
         
     | 
| 
       6 
     | 
    
         
            -
                  def initialize(processed_source, corrector, offset, bound_range)
         
     | 
| 
       7 
     | 
    
         
            -
                    @processed_source = processed_source
         
     | 
| 
       8 
     | 
    
         
            -
                    @corrector = corrector
         
     | 
| 
       9 
     | 
    
         
            -
                    @offset = offset
         
     | 
| 
       10 
     | 
    
         
            -
                    @bound_range = bound_range
         
     | 
| 
       11 
     | 
    
         
            -
                  end
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                  def remove(range)
         
     | 
| 
       14 
     | 
    
         
            -
                    @corrector.remove(range_with_offset(range))
         
     | 
| 
       15 
     | 
    
         
            -
                  end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  def insert_before(range, content)
         
     | 
| 
       18 
     | 
    
         
            -
                    @corrector.insert_before(range_with_offset(range), content)
         
     | 
| 
       19 
     | 
    
         
            -
                  end
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                  def insert_after(range, content)
         
     | 
| 
       22 
     | 
    
         
            -
                    @corrector.insert_after(range_with_offset(range), content)
         
     | 
| 
       23 
     | 
    
         
            -
                  end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                  def replace(range, content)
         
     | 
| 
       26 
     | 
    
         
            -
                    @corrector.replace(range_with_offset(range), content)
         
     | 
| 
       27 
     | 
    
         
            -
                  end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                  def remove_preceding(range, size)
         
     | 
| 
       30 
     | 
    
         
            -
                    @corrector.remove_preceding(range_with_offset(range), size)
         
     | 
| 
       31 
     | 
    
         
            -
                  end
         
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
                  def remove_leading(range, size)
         
     | 
| 
       34 
     | 
    
         
            -
                    @corrector.remove_leading(range_with_offset(range), size)
         
     | 
| 
       35 
     | 
    
         
            -
                  end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                  def remove_trailing(range, size)
         
     | 
| 
       38 
     | 
    
         
            -
                    @corrector.remove_trailing(range_with_offset(range), size)
         
     | 
| 
       39 
     | 
    
         
            -
                  end
         
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
                  def range_with_offset(node_or_range)
         
     | 
| 
       42 
     | 
    
         
            -
                    range = to_range(node_or_range)
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
                    @processed_source.to_source_range(
         
     | 
| 
       45 
     | 
    
         
            -
                      bound(@offset + range.begin_pos)..bound(@offset + (range.end_pos - 1)),
         
     | 
| 
       46 
     | 
    
         
            -
                    )
         
     | 
| 
       47 
     | 
    
         
            -
                  end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                  def bound(pos)
         
     | 
| 
       50 
     | 
    
         
            -
                    pos.clamp(@bound_range.min, @bound_range.max)
         
     | 
| 
       51 
     | 
    
         
            -
                  end
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
                  private
         
     | 
| 
       54 
     | 
    
         
            -
             
     | 
| 
       55 
     | 
    
         
            -
                  def to_range(node_or_range)
         
     | 
| 
       56 
     | 
    
         
            -
                    case node_or_range
         
     | 
| 
       57 
     | 
    
         
            -
                    when ::RuboCop::AST::Node, ::Parser::Source::Comment
         
     | 
| 
       58 
     | 
    
         
            -
                      node_or_range.loc.expression
         
     | 
| 
       59 
     | 
    
         
            -
                    when ::Parser::Source::Range
         
     | 
| 
       60 
     | 
    
         
            -
                      node_or_range
         
     | 
| 
       61 
     | 
    
         
            -
                    else
         
     | 
| 
       62 
     | 
    
         
            -
                      raise TypeError,
         
     | 
| 
       63 
     | 
    
         
            -
                        "Expected a Parser::Source::Range, Comment or " \
         
     | 
| 
       64 
     | 
    
         
            -
                          "Rubocop::AST::Node, got #{node_or_range.class}"
         
     | 
| 
       65 
     | 
    
         
            -
                    end
         
     | 
| 
       66 
     | 
    
         
            -
                  end
         
     | 
| 
       67 
     | 
    
         
            -
                end
         
     | 
| 
       68 
     | 
    
         
            -
              end
         
     | 
| 
       69 
     | 
    
         
            -
            end
         
     |