59 lines
1.7 KiB
Text
59 lines
1.7 KiB
Text
![]() |
/-
|
||
|
Copyright (c) 2024 Joseph Tooby-Smith. All rights reserved.
|
||
|
Released under Apache 2.0 license.
|
||
|
Authors: Joseph Tooby-Smith
|
||
|
-/
|
||
|
import Batteries.Lean.HashSet
|
||
|
import Mathlib.Lean.Expr.Basic
|
||
|
import Mathlib.Lean.CoreM
|
||
|
import ImportGraph.RequiredModules
|
||
|
/-!
|
||
|
|
||
|
# Basic underlying structure for TODOs.
|
||
|
|
||
|
-/
|
||
|
|
||
|
namespace HepLean
|
||
|
open Lean System Meta
|
||
|
|
||
|
/-- The information from a `TODO ...` command. -/
|
||
|
structure todoInfo where
|
||
|
/-- The content of the note. -/
|
||
|
content : String
|
||
|
/-- The file name where the note came from. -/
|
||
|
fileName : Name
|
||
|
/-- The line from where the note came from. -/
|
||
|
line : Nat
|
||
|
|
||
|
/-- Environment extension to store `todo ...`. -/
|
||
|
initialize todoExtension : SimplePersistentEnvExtension todoInfo (Array todoInfo) ←
|
||
|
registerSimplePersistentEnvExtension {
|
||
|
name := `todoExtension
|
||
|
addEntryFn := fun arr todoInfor => arr.push todoInfor
|
||
|
addImportedFn := fun es => es.foldl (· ++ ·) #[]
|
||
|
}
|
||
|
|
||
|
/-- Syntax for the `TODO ...` command. -/
|
||
|
syntax (name := todo_comment) "TODO " str : command
|
||
|
|
||
|
/-- Elaborator for the `TODO ...` command -/
|
||
|
@[command_elab todo_comment]
|
||
|
def elabTODO : Lean.Elab.Command.CommandElab := fun stx =>
|
||
|
match stx with
|
||
|
| `(TODO $s) => do
|
||
|
let str : String := s.getString
|
||
|
let pos := stx.getPos?
|
||
|
match pos with
|
||
|
| some pos => do
|
||
|
let env ← getEnv
|
||
|
let fileMap ← getFileMap
|
||
|
let filePos := fileMap.toPosition pos
|
||
|
let line := filePos.line
|
||
|
let modName := env.mainModule
|
||
|
let todoInfo : todoInfo := { content := str, fileName := modName, line := line }
|
||
|
modifyEnv fun env => todoExtension.addEntry env todoInfo
|
||
|
| none => throwError "Invalid syntax for `TODO` command"
|
||
|
| _ => throwError "Invalid syntax for `TODO` command"
|
||
|
|
||
|
end HepLean
|