class Temple::Filters::StaticAnalyzer

Convert [:dynamic, code] to [:static, text] if code is static Ruby expression.

def call(exp)

def call(exp)
  # Optimize only when Ripper is available.
  if ::Temple::StaticAnalyzer.available?
    super
  else
    exp
  end
end

def on_dynamic(code)

def on_dynamic(code)
  if ::Temple::StaticAnalyzer.static?(code)
    exp = [:static, eval(code).to_s]
    newlines = code.count("\n")
    if newlines == 0
      exp
    else
      [:multi, exp, *newlines.times.map { [:newline] }]
    end
  else
    [:dynamic, code]
  end
end