Sha256: 28f3d792a23a08e96f47dc602c58f0f003cfd9d07cd0a7256be19e01abbb417a
Contents?: true
Size: 1.38 KB
Versions: 2
Compression:
Stored size: 1.38 KB
Contents
require "ripper" module HamlI18nLint class RubyParser < Ripper::SexpBuilderPP def self.sexp(src, filename = '-', lineno = 1) builder = new(src, filename, lineno) sexp = builder.parse sexp unless builder.error? end def initialize(src, *) @src = src super end def on_tstring_beg(tok) @buf ||= [] @buf << [[lineno, column]] super end def on_heredoc_beg(tok) @buf ||= [] @buf << [[lineno, column]] super end def on_tstring_end(tok) @buf.last << [lineno, column] super end def on_heredoc_end(tok) @buf.last << [lineno, column + tok.size-1] super end def on_string_literal(*args) pos = @buf.pop lineno_pos = pos.map(&:first) column_pos = pos.map(&:last) lines = @src.lines[lineno_pos.first-1...lineno_pos.last] if lineno_pos.first == lineno_pos.last lines[0] = lines[0].byteslice(column_pos.first..column_pos.last).force_encoding(@src.encoding) else lines[0] = lines[0].dup.tap { |l| l.force_encoding(Encoding::BINARY)[0...column_pos.first] = ''; l.force_encoding(@src.encoding) } lines[-1] = lines[-1].dup.tap { |l| l.force_encoding(Encoding::BINARY)[column_pos.last+1..-1] = ''; l.force_encoding(@src.encoding) } end args.unshift(:string_literal, lines.join, pos) args end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
haml_i18n_lint-0.12.0 | lib/haml_i18n_lint/ruby_parser.rb |
haml_i18n_lint-0.11.0 | lib/haml_i18n_lint/ruby_parser.rb |