| import Lean | |
| open Lean | |
| open Lean.Elab | |
| def run (input : String) (failIff : Bool := true) : MetaIO Unit := | |
| do env ← MetaIO.getEnv; | |
| opts ← MetaIO.getOptions; | |
| let (env, messages) := process input env opts; | |
| messages.toList.forM $ fun msg => IO.println msg; | |
| when (failIff && messages.hasErrors) $ throw (IO.userError "errors have been found"); | |
| when (!failIff && !messages.hasErrors) $ throw (IO.userError "there are no errors"); | |
| pure () | |
| open Lean.Parser | |
| @[term_parser] def tst := parser! "(|" >> term_parser >> "|)" | |
| @[term_parser] def boo : ParserDescr := | |
| ParserDescr.node `boo | |
| (ParserDescr.andthen | |
| (ParserDescr.symbol "[|" 0) | |
| (ParserDescr.andthen | |
| (ParserDescr.parser `term 0) | |
| (ParserDescr.symbol "|]" 0))) | |
| open Lean.Elab.Term | |
| @[term_elab tst] def elabTst : TermElab := | |
| fun stx expected? => | |
| elabTerm (stx.getArg 1) expected? | |
| @[term_elab boo] def elabBoo : TermElab := | |
| fun stx expected? => | |
| elabTerm (stx.getArg 1) expected? | |
| #eval run "#check [| @id.{1} Nat |]" | |
| #eval run "#check (| id 1 |)" |