Sha256: 133bbaf245bd8b72b4ff7dc7a8f3ee4a7ef7752d0af9dc05fa206b538d1d7499
Contents?: true
Size: 1.09 KB
Versions: 2
Compression:
Stored size: 1.09 KB
Contents
# frozen_string_literal: true require "ripper" module Yattho module Forms # :nodoc: class BufferRewriter < Ripper class << self def rewrite(code) parser = new(code, "(code)", 0) parser.parse line_offsets = calc_line_offsets(code) code.dup.tap do |result| parser.var_refs.reverse_each do |lineno, stop| line_offset = line_offsets[lineno] stop += line_offset stop -= 1 if stop < code.length start = stop - "@output_buffer".length result[start...stop] = "output_buffer" end end end private def calc_line_offsets(code) idx = -1 [0].tap do |offsets| while (idx = code.index(/\r?\n/, idx + 1)) offsets << Regexp.last_match.end(0) end end end end def on_var_ref(var) return unless var == "@output_buffer" var_refs << [lineno, column] end def var_refs @var_refs ||= [] end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
yattho_view_components-0.1.1 | lib/yattho/forms/buffer_rewriter.rb |
yattho_view_components-0.0.1 | lib/yattho/forms/buffer_rewriter.rb |