feat(frontend): Tomogram #220

Open
aniva wants to merge 3 commits from frontend/tomogram into dev
3 changed files with 38 additions and 1 deletions

View File

@ -10,7 +10,7 @@ namespace Lean.Elab
private def elaboratorToString : Name → String private def elaboratorToString : Name → String
| .anonymous => "" | .anonymous => ""
| n => s!"⟨{n}⟩ " | n => s!"⟨{n}⟩ "
private def indent (s : String) : String := "\n".intercalate $ s.splitOn "\n" |>.map ("\t" ++ .) private def indent (s : String) : String := "\n".intercalate $ s.splitOn "\n" |>.map (" " ++ .)
/-- The `Syntax` for a `Lean.Elab.Info`, if there is one. -/ /-- The `Syntax` for a `Lean.Elab.Info`, if there is one. -/
protected def Info.stx? : Info → Option Syntax protected def Info.stx? : Info → Option Syntax

29
Tomograph.lean Normal file
View File

@ -0,0 +1,29 @@
import Pantograph.Frontend
open Lean
namespace Pantograph
def fail (s : String) : IO Unit := do
IO.eprintln s
def dissect (args: List String): IO Unit := do
let fileName :: _args := args | fail s!"Must supply a file name"
let file ← IO.FS.readFile fileName
let (context, state) ← do Frontend.createContextStateFromFile file fileName (env? := .none) {}
let frontendM: Elab.Frontend.FrontendM _ :=
Frontend.mapCompilationSteps λ step => do
for tree in step.trees do
IO.println s!"{← tree.toString}"
let (_, _) ← frontendM.run context |>.run state
return ()
end Pantograph
open Pantograph
def main (args : List String) : IO Unit := do
let command :: args := args | IO.eprintln "Must supply a command"
match command with
| "dissect" => dissect args
| _ => IO.eprintln s!"Unknown command {command}"

View File

@ -10,6 +10,7 @@ lean_lib Pantograph {
lean_lib Repl { lean_lib Repl {
} }
@[default_target] @[default_target]
lean_exe repl { lean_exe repl {
root := `Main root := `Main
@ -17,6 +18,13 @@ lean_exe repl {
supportInterpreter := true supportInterpreter := true
} }
@[default_target]
lean_exe tomograph {
root := `Tomograph
-- Solves the native symbol not found problem
supportInterpreter := true
}
require LSpec from git require LSpec from git
"https://github.com/argumentcomputer/LSpec.git" @ "a6652a48b5c67b0d8dd3930fad6390a97d127e8d" "https://github.com/argumentcomputer/LSpec.git" @ "a6652a48b5c67b0d8dd3930fad6390a97d127e8d"
lean_lib Test { lean_lib Test {