lean4-htt/tests/lean/run/ppMData.lean
Kyle Miller cd7f55b6c9
feat: pp.mdata (#12606)
This PR adds the pretty printer option `pp.mdata`, which causes the
pretty printer to annotate terms with any metadata that is present. For
example,
```lean
set_option pp.mdata true
/-- info: [mdata noindex:true] 2 : Nat -/
#guard_msgs in #check no_index 2
```
The `[mdata ...] e` syntax is only for pretty printing.

Thanks to @Rob23oba for an initial version.

Closes #10929
2026-02-24 04:30:26 +00:00

64 lines
1.9 KiB
Text

import Lean.Meta.Basic
/-!
# Tests of `pp.mdata`
-/
open Lean
set_option pp.mdata true
/-!
Having mdata on the head constant, partially applied, and fully applied.
-/
/--
info: ([mdata n:1 z:-1 b:true s:"str" x:_ m:foo.bar] @id) 3
---
info: ([mdata n:1 z:-1 b:true s:"str" x:_ m:foo.bar] id) 3
---
info: [mdata n:1 z:-1 b:true s:"str" x:_ m:foo.bar] id 3
-/
#guard_msgs in
run_meta
let d : KVMap := KVMap.empty
|>.insert `n (1 : Nat)
|>.insert `z (-1 : Int)
|>.insert `b true
|>.insert `s "str"
|>.insert `x (Unhygienic.run `(1+1))
|>.insert `m `foo.bar
Lean.logInfo <| mkApp2 (.mdata d <| .const ``id [1]) (mkConst ``Nat) (.lit (.natVal 3))
Lean.logInfo <| Expr.app (.mdata d <| Expr.app (.const ``id [1]) (mkConst ``Nat)) (.lit (.natVal 3))
Lean.logInfo <| Expr.mdata d <| mkApp2 (.const ``id [1]) (mkConst ``Nat) (.lit (.natVal 3))
/-!
`noindex`
-/
/-- info: [mdata noindex:true] 2 : Nat -/
#guard_msgs in #check no_index 2
/-!
Metadata blocks unexpanders
-/
/-- info: ([mdata noindex:true] HAdd.hAdd) 2 3 : Nat -/
#guard_msgs in #check (no_index HAdd.hAdd) 2 3
/-- info: 2 + 3 : Nat -/
#guard_msgs in #check HAdd.hAdd 2 3
/-!
Metadata blocks dot notation, both in implicit and explicit mode
-/
/-- info: ([mdata noindex:true] Nat.add) x y : Nat -/
#guard_msgs in variable (x y : Nat) in #check (no_index Nat.add) x y
/-- info: x.add y : Nat -/
#guard_msgs in variable (x y : Nat) in #check Nat.add x y
/-- info: [mdata noindex:true] x.add y : Nat -/
#guard_msgs in variable (x y : Nat) in #check no_index (Nat.add x y)
section
set_option pp.explicit true
/-- info: ([mdata noindex:true] Nat.add) x y : Nat -/
#guard_msgs in variable (x y : Nat) in #check (no_index Nat.add) x y
/-- info: x.add y : Nat -/
#guard_msgs in variable (x y : Nat) in #check Nat.add x y
/-- info: [mdata noindex:true] x.add y : Nat -/
#guard_msgs in variable (x y : Nat) in #check no_index (Nat.add x y)
end