lean4-htt/tests/lean/run/ppMVars.lean
Kyle Miller 36c2511b27
feat: options pp.mvars.anonymous and pp.mvars.levels (#5711)
Gives more control over pretty printing metavariables.

- When `pp.mvars.levels` is false, then universe level metavariables
pretty print as `_` rather than `?u.22`
- When `pp.mvars.anonymous` is false, then anonymous metavariables
pretty print as `?_` rather than `?m.22`. Named metavariables still
pretty print with their names. When this is false, it also sets
`pp.mvars.levels` to false, since every level metavariable is anonymous.
- When `pp.mvars` is false, then all metavariables pretty print as `?_`
or `_`.

Modifies TryThis to use `pp.mvars.anonymous` rather than doing a
post-delaboration modification. This incidentally improves TryThis since
it now prints universe level metavariables as `_` rather than `?u.22`.
2024-10-14 21:44:15 +00:00

154 lines
3 KiB
Text

import Lean.Elab.BuiltinNotation
import Lean.Meta.Basic
/-!
# Testing `pp.mvars`
-/
open Lean Meta
/-!
Default values
-/
/-- info: ?a : Nat -/
#guard_msgs in #check (?a : Nat)
/-- info: ⊢ Sort ?u.1 -/
#guard_msgs (info, drop all) in
example : (by_elab do return .sort (.mvar (.mk (.num `_uniq 1)))) := by
trace_state
sorry
/-!
Turning off `pp.mvars`
-/
section
set_option pp.mvars false
/-- info: ?_ : Nat -/
#guard_msgs in #check (?a : Nat)
/-- info: ?_ : Nat -/
#guard_msgs in #check (_ : Nat)
/-- info: ⊢ Sort _ -/
#guard_msgs (info, drop all) in
example : (by_elab do return .sort (.mvar (.mk (.num `_uniq 1)))) := by
trace_state
sorry
/-- info: ⊢ Type _ -/
#guard_msgs (info, drop all) in
example : Type _ := by
trace_state
sorry
end
/-!
Turning off `pp.mvars.levels`
-/
section
set_option pp.mvars.levels false
/-- info: ?a : Nat -/
#guard_msgs in #check (?a : Nat)
/-- info: ?m.222222222 : Nat -/
#guard_msgs in #check by_elab do
-- Control the mvarId with something that's too big to happen naturally:
let mvarId : MVarId := .mk (.num `_uniq 222222222)
let lctx ← getLCtx
let type := mkConst ``Nat
Lean.MonadMCtx.modifyMCtx fun mctx => mctx.addExprMVarDecl mvarId .anonymous lctx {} type .natural 0
return .mvar mvarId
/-- info: ⊢ Sort _ -/
#guard_msgs (info, drop all) in
example : (by_elab do return .sort (.mvar (.mk (.num `_uniq 1)))) := by
trace_state
sorry
/-- info: ⊢ Type _ -/
#guard_msgs (info, drop all) in
example : Type _ := by
trace_state
sorry
end
/-!
Turning off `pp.mvars.anonymous`
-/
section
set_option pp.mvars.anonymous false
/-- info: ?a : Nat -/
#guard_msgs in #check (?a : Nat)
/-- info: ?_ : Nat -/
#guard_msgs in #check by_elab do
-- Control the mvarId with something that's too big to happen naturally:
let mvarId : MVarId := .mk (.num `_uniq 222222222)
let lctx ← getLCtx
let type := mkConst ``Nat
Lean.MonadMCtx.modifyMCtx fun mctx => mctx.addExprMVarDecl mvarId .anonymous lctx {} type .natural 0
return .mvar mvarId
/-- info: ⊢ Sort _ -/
#guard_msgs (info, drop all) in
example : (by_elab do return .sort (.mvar (.mk (.num `_uniq 1)))) := by
trace_state
sorry
/-- info: ⊢ Type _ -/
#guard_msgs (info, drop all) in
example : Type _ := by
trace_state
sorry
end
/-!
Turning off `pp.mvars` and turning on `pp.mvars.withType`.
-/
section
set_option pp.mvars false
set_option pp.mvars.withType true
/-- info: (?_ : Nat) : Nat -/
#guard_msgs in #check (?a : Nat)
/-- info: (?_ : Nat) : Nat -/
#guard_msgs in #check (_ : Nat)
end
/-!
Turning on `pp.mvars.withType`.
-/
section
set_option pp.mvars.withType true
/-- info: (?a : Nat) : Nat -/
#guard_msgs in #check (?a : Nat)
end
/-!
Delayed assignment metavariables respecting `pp.mvars.anonymous`
-/
section
set_option pp.mvars.anonymous false
/-- info: fun x => ?a : (x : Nat) → ?_ x -/
#guard_msgs in #check fun _ : Nat => ?a
set_option pp.mvars.delayed true
/-- info: fun x => ?_ x : (x : Nat) → ?_ x -/
#guard_msgs in #check fun _ : Nat => ?a
end