New test demonstrates how to use them. The user-defined extensions cannot be used in the same file where they were declared because the `initialize` commands are only executed when we import the modules containing them. TODO: user-defined attributes.
23 lines
755 B
Text
23 lines
755 B
Text
import Lean
|
|
|
|
open Lean
|
|
|
|
initialize blaExtension : SimplePersistentEnvExtension Name NameSet ←
|
|
registerSimplePersistentEnvExtension {
|
|
name := `blaExt
|
|
addEntryFn := NameSet.insert
|
|
addImportedFn := fun es => mkStateFromImportedEntries NameSet.insert {} es
|
|
}
|
|
|
|
syntax (name := insertBla) "insert_bla " ident : command
|
|
syntax (name := showBla) "show_bla_set" : command
|
|
|
|
open Lean.Elab
|
|
open Lean.Elab.Command
|
|
|
|
@[commandElab insertBla] def elabInsertBla : CommandElab := fun stx => do
|
|
IO.println s!"inserting {stx[1].getId}"
|
|
modifyEnv fun env => blaExtension.addEntry env stx[1].getId
|
|
|
|
@[commandElab showBla] def elabShowBla : CommandElab := fun stx => do
|
|
IO.println s!"bla set: {blaExtension.getState (← getEnv) |>.toList}"
|