33 lines
1,014 B
Text
33 lines
1,014 B
Text
import Lean
|
||
|
||
open Lean
|
||
|
||
initialize blaAttr : TagAttribute ← registerTagAttribute `bla "simple user defined attribute"
|
||
|
||
/-- My own new simp attribute. -/
|
||
register_simp_attr my_simp
|
||
|
||
syntax (name := foo) "foo" num "important"? : attr
|
||
|
||
initialize fooAttr : ParametricAttribute (Nat × Bool) ←
|
||
registerParametricAttribute {
|
||
name := `foo
|
||
descr := "parametric attribute containing a priority and flag"
|
||
getParam := fun _ stx =>
|
||
match stx with
|
||
| `(attr| foo $prio:num $[important%$imp]?) =>
|
||
return (prio.getNat, imp.isSome)
|
||
| _ => throwError "unexpected foo attribute"
|
||
afterSet := fun declName _ => do
|
||
IO.println s!"set attribute [foo] at {declName}"
|
||
}
|
||
|
||
syntax (name := trace_add) "trace_add" : attr
|
||
|
||
initialize registerBuiltinAttribute {
|
||
name := `trace_add
|
||
descr := "Simply traces when added, to debug double-application bugs"
|
||
add := fun decl _stx _kind => do
|
||
logInfo m!"trace_add attribute added to {decl}"
|
||
-- applicationTime := .afterCompilation
|
||
}
|