class Rufo::Formatter
def indent_body(exps, force_multiline: false)
def indent_body(exps, force_multiline: false) skip_space has_semicolon = semicolon? if has_semicolon next_token skip_semicolons end # If an end follows there's nothing to do if keyword?("end") if has_semicolon write "; " else write " " end return end # A then keyword can appear after a newline after an `if`, `unless`, etc. # Since that's a super weird formatting for if, probably way too obsolete # by now, we just remove it. has_then = keyword?("then") if has_then next_token skip_space end has_do = keyword?("do") if has_do next_token skip_space end # If no newline or comment follows, we format it inline. if !force_multiline && !(newline? || comment?) if has_then write " then " elsif has_do write " do " elsif has_semicolon write "; " else write " " end visit_exps exps, with_indent: false, with_lines: false consume_space return end indent do consume_end_of_line(want_multiline: false) end if keyword?("then") next_token skip_space_or_newline end # If the body is [[:void_stmt]] it's an empty body # so there's nothing to write if exps.size == 1 && exps[0][0] == :void_stmt skip_space_or_newline else indent do visit_exps exps, with_indent: true end write_line unless @last_was_newline end end