56 lines
1.9 KiB
Plaintext
56 lines
1.9 KiB
Plaintext
/-
|
||
Copyright (c) 2021 Henrik Böving. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Authors: Henrik Böving
|
||
-/
|
||
|
||
import Lean
|
||
import Lake
|
||
import Lake.CLI.Main
|
||
import DocGen4.Process
|
||
import Std.Data.HashMap
|
||
|
||
namespace DocGen4
|
||
|
||
open Lean System Std IO
|
||
|
||
/--
|
||
Sets up a lake workspace for the current project. Furthermore initialize
|
||
the Lean search path with the path to the proper compiler from lean-toolchain
|
||
as well as all the dependencies.
|
||
-/
|
||
def lakeSetup (imports : List String) : IO (Except UInt32 (Lake.Workspace × String)) := do
|
||
let (leanInstall?, lakeInstall?) ← Lake.findInstall?
|
||
match Lake.Cli.mkLakeConfig {leanInstall?, lakeInstall?} with
|
||
| Except.ok config =>
|
||
let ws ← Lake.LogT.run Lake.MonadLog.eio (Lake.loadWorkspace config)
|
||
let lean := config.leanInstall
|
||
if lean.githash ≠ Lean.githash then
|
||
IO.println s!"WARNING: This doc-gen was built with Lean: {Lean.githash} but the project is running on: {lean.githash}"
|
||
let lake := config.lakeInstall
|
||
let ctx ← Lake.mkBuildContext ws lean lake
|
||
ws.root.buildImportsAndDeps imports |>.run Lake.MonadLog.eio ctx
|
||
initSearchPath (←findSysroot) ws.leanPaths.oleanPath
|
||
pure $ Except.ok (ws, lean.githash)
|
||
| Except.error err =>
|
||
throw $ IO.userError err.toString
|
||
|
||
/--
|
||
Load a list of modules from the current Lean search path into an `Environment`
|
||
to process for documentation.
|
||
-/
|
||
def load (imports : List Name) : IO Process.AnalyzerResult := do
|
||
let env ← importModules (List.map (Import.mk · false) imports) Options.empty
|
||
IO.println "Processing modules"
|
||
let config := {
|
||
-- TODO: parameterize maxHeartbeats
|
||
maxHeartbeats := 100000000,
|
||
options := ⟨[(`pp.tagAppFns, true)]⟩,
|
||
-- TODO: Figure out whether this could cause some bugs
|
||
fileName := default,
|
||
fileMap := default,
|
||
}
|
||
Prod.fst <$> Meta.MetaM.toIO Process.process config { env := env} {} {}
|
||
|
||
end DocGen4
|