-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathJavaGenTestData.lean
More file actions
79 lines (70 loc) · 2.69 KB
/
Copy pathJavaGenTestData.lean
File metadata and controls
79 lines (70 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/-
Copyright Strata Contributors
SPDX-License-Identifier: Apache-2.0 OR MIT
-/
import StrataDDM
/-!
# Java test data generation helper
Usage:
lake env lean --run Scripts/JavaGenTestData.lean javaGen <dialect-file> <package> <output-dir>
lake env lean --run Scripts/JavaGenTestData.lean print --include <dir> <file>
Note: Unlike the former CLI `javaGen` command, this script only loads dialects
from files — it does not support referencing preloaded dialect names directly.
This is sufficient for the testdata regeneration workflow.
-/
open StrataDDM
def javaGen (dialectPath packageName outputDir : String) : IO Unit := do
let fm ← mkDialectFileMap
let d ← readStrataDialectFile fm dialectPath
match StrataDDM.Java.generateDialect d packageName with
| .ok files =>
StrataDDM.Java.writeJavaFiles outputDir packageName files
IO.println s!"Generated Java files for {d.name} in {outputDir}/{StrataDDM.Java.packageToPath packageName}"
| .error msg =>
IO.eprintln s!"Error generating Java: {msg}"
IO.Process.exit 1
def printFile (includeDirs : List String) (file : String) : IO Unit := do
let fm ← mkDialectFileMap
let mut fm := fm
for dir in includeDirs do
match ← fm.addSearchPath dir |>.toBaseIO with
| .error msg =>
IO.eprintln msg
IO.Process.exit 1
| .ok fm' => fm := fm'
let ld ← fm.getLoaded
if mem : file ∈ ld.dialects then
IO.print <| ld.dialects.format file mem
return
match ← readStrataFile fm file with
| .dialect d =>
let ld ← fm.getLoaded
if mem : d.name ∈ ld.dialects then
IO.print <| ld.dialects.format d.name mem
else
IO.eprintln "Internal error reading file."
IO.Process.exit 1
| .program pgm =>
IO.print <| toString pgm
private def parseIncludeArgs (args : List String) : List String × List String :=
go args []
where
go : List String → List String → List String × List String
| "--include" :: dir :: rest, includes => go rest (dir :: includes)
| other, includes => (includes.reverse, other)
def main (args : List String) : IO Unit := do
match args with
| "javaGen" :: dialectPath :: packageName :: outputDir :: _ =>
javaGen dialectPath packageName outputDir
| "print" :: rest =>
let (includeDirs, fileArgs) := parseIncludeArgs rest
match fileArgs with
| [file] => printFile includeDirs file
| _ =>
IO.eprintln "Usage: ... print [--include <dir>]... <file>"
IO.Process.exit 1
| _ =>
IO.eprintln "Usage:"
IO.eprintln " lake env lean --run Scripts/JavaGenTestData.lean javaGen <dialect> <package> <output-dir>"
IO.eprintln " lake env lean --run Scripts/JavaGenTestData.lean print [--include <dir>]... <file>"
IO.Process.exit 1