/-! Parse and reformat file -/
import Lean.PrettyPrinter
new_frontend
open Lean
open Lean.Elab
open Lean.Elab.Term
open Lean.Format

unsafe def main (args : List String) : IO Unit := do
let (debug, f) : Bool × String := match args with
  | [f, "-d"] => (true, f)
  | [f]       => (false, f)
  | _         => panic! "usage: file [-d]";
let env ← mkEmptyEnvironment;
let stx ← Lean.Parser.parseFile env args.head!;
let (f, _) ← (finally (PrettyPrinter.ppModule stx) printTraces).toIO { options := Options.empty.setBool `trace.PrettyPrinter.parenthesize debug } { env := env };
IO.print f;
--stx' ← Lean.Parser.parseModule env args.head! (toString f);
pure ()
-- TODO: this doesn't quite work yet because the parenthesizer adds unnecessary parentheses in one case
/-
when (stx' != stx) $
  stx.getArgs.size.forM fun i =>
    when (stx.getArg i != stx'.getArg i) $
      throw $ IO.userError $ "reparsing failed:\n" ++ toString (stx.getArg i) ++ "\n" ++ toString (stx'.getArg i)
      -/

#eval main ["../../../src/Init/Core.lean"]
