27 lines
1,001 B
Text
27 lines
1,001 B
Text
/-
|
|
Copyright (c) 2024 Mario Carneiro. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
Authors: Mario Carneiro
|
|
-/
|
|
prelude
|
|
import Lean.Compiler.InitAttr
|
|
import Lean.DocString
|
|
|
|
namespace Lean
|
|
|
|
def declareBuiltinDocStringAndRanges (declName : Name) : AttrM Unit := do
|
|
if let some doc ← findDocString? (← getEnv) declName (includeBuiltin := false) then
|
|
declareBuiltin (declName ++ `docString) (mkAppN (mkConst ``addBuiltinDocString) #[toExpr declName, toExpr doc])
|
|
if let some declRanges ← findDeclarationRanges? declName then
|
|
declareBuiltin (declName ++ `declRange) (mkAppN (mkConst ``addBuiltinDeclarationRanges) #[toExpr declName, toExpr declRanges])
|
|
|
|
builtin_initialize
|
|
registerBuiltinAttribute {
|
|
name := `builtin_doc
|
|
descr := "make the docs and location of this declaration available as a builtin"
|
|
add := fun decl stx _ => do
|
|
Attribute.Builtin.ensureNoArgs stx
|
|
declareBuiltinDocStringAndRanges decl
|
|
}
|
|
|
|
end Lean
|