class Rufo::ErbFormatter
def determine_code_wrappers(code_str)
def determine_code_wrappers(code_str) keywords = Ripper.lex("#{code_str}").filter { |lex_token| code_block_token?(lex_token) } lexical_tokens = keywords.map { |lex_token| lex_token[3].to_s } state_tally = lexical_tokens.group_by(&:itself).transform_values(&:count) beg_token = state_tally["BEG"] || state_tally["EXPR_BEG"] || 0 end_token = state_tally["END"] || state_tally["EXPR_END"] || 0 depth = beg_token - end_token if depth > 0 affix = format_affix("end", depth.abs, :suffix) return nil, affix if Ripper.sexp("#{code_str}#{affix}") end return nil, "}" if Ripper.sexp("#{code_str} }") return "{", nil if Ripper.sexp("{ #{code_str}") if depth < 0 affix = format_affix("begin", depth.abs, :prefix) return affix, nil if Ripper.sexp("#{affix}#{code_str}") end return "begin\n", "\nend" if Ripper.sexp("begin\n#{code_str}\nend") return "if a\n", "\nend" if Ripper.sexp("if a\n#{code_str}\nend") return "case a\n", "\nend" if Ripper.sexp("case a\n#{code_str}\nend") raise_syntax_error!(code_str) end