41 lines
1.2 KiB
Plaintext
41 lines
1.2 KiB
Plaintext
|
/-
|
||
|
Copyright (c) 2022 Henrik Böving. All rights reserved.
|
||
|
Released under Apache 2.0 license as described in the file LICENSE.
|
||
|
Authors: Henrik Böving
|
||
|
-/
|
||
|
import Lean.Data.Json
|
||
|
|
||
|
namespace DocGen4.Output.LeanInk
|
||
|
|
||
|
open Lean
|
||
|
open IO
|
||
|
|
||
|
def runInk (inkPath : System.FilePath) (sourceFilePath : System.FilePath) : IO Json := do
|
||
|
let arguments := #[
|
||
|
"analyze", sourceFilePath.toString,
|
||
|
"--lake", "lakefile.lean",
|
||
|
"--x-enable-type-info",
|
||
|
"--x-enable-docStrings",
|
||
|
"--x-enable-semantic-token"
|
||
|
]
|
||
|
let inkProcess ← Process.spawn {
|
||
|
stdin := Process.Stdio.null
|
||
|
stdout := Process.Stdio.piped
|
||
|
stderr := Process.Stdio.piped
|
||
|
cmd := inkPath.toString
|
||
|
args := arguments
|
||
|
}
|
||
|
match (←inkProcess.wait) with
|
||
|
| 0 =>
|
||
|
let outputFilePath := sourceFilePath.withExtension "lean.leanInk"
|
||
|
let output ← FS.readFile outputFilePath
|
||
|
FS.removeFile outputFilePath
|
||
|
match Json.parse output with
|
||
|
| .ok out => pure out
|
||
|
| .error err =>
|
||
|
throw $ IO.userError s!"LeanInk returned invalid JSON for file: {sourceFilePath}:\n{err}"
|
||
|
| code =>
|
||
|
throw $ IO.userError s!"LeanInk exited with code {code} for file: {sourceFilePath}:\n{←inkProcess.stderr.readToEnd}"
|
||
|
|
||
|
end DocGen4.Output.LeanInk
|