Skip to content

Commit 1da59b1

Browse files
committed
make util recursively traverse dirs
1 parent 0a5e01d commit 1da59b1

File tree

1 file changed

+38
-25
lines changed

1 file changed

+38
-25
lines changed
Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
def replTestDir = "../compiler/test-resources/repl"
1+
def replTestDir = "../compiler/test-resources"
22

33
def list(dir: String = "."): Vector[String] =
4-
Option(new java.io.File(dir).list).map(_.toVector).getOrElse(Vector())
4+
Option(java.io.File(dir).list).map(_.toVector).getOrElse(Vector())
55

66
def loadLines(fileName: String, enc: String = "UTF-8"): Vector[String] =
77
var result = Vector.empty[String]
@@ -10,30 +10,43 @@ def loadLines(fileName: String, enc: String = "UTF-8"): Vector[String] =
1010
result
1111

1212
def saveString(text: String, fileName: String, enc: String = "UTF-8"): Unit =
13-
val f = new java.io.File(fileName)
14-
val pw = new java.io.PrintWriter(f, enc)
13+
val f = java.io.File(fileName)
14+
val pw = java.io.PrintWriter(f, enc)
1515
try pw.write(text) finally pw.close()
1616

17+
extension (s: String) def isDir: Boolean = java.io.File(s).isDirectory
18+
19+
20+
def visitFile(path: String, isModify: Boolean): Unit =
21+
print(s"\nprocessing: $path")
22+
val lines = loadLines(path)
23+
var result = Vector[String]()
24+
for i <- lines.indices do
25+
result :+= lines(i)
26+
if lines(i).startsWith("scala>") &&
27+
lines.lift(i + 1).map(_.startsWith("1 | ")).getOrElse(false)
28+
then
29+
result :+= "-- Error:"
30+
31+
val msg =
32+
if lines == result then Console.GREEN + " unmodified" + Console.RESET
33+
else Console.RED + " *** MODIFIED" + Console.RESET
34+
println(msg)
35+
if lines != result then
36+
println("\nbefore ==========>\n" + lines.mkString("\n"))
37+
println("\nafter ==========>\n" + result.mkString("\n"))
38+
if isModify then
39+
println(s"Writing: $path")
40+
saveString(result.mkString("\n"), path)
41+
42+
def visitDirRecursively(dirName: String, isModify: Boolean): Unit =
43+
println(s"Enter directory: $dirName")
44+
list(dirName).foreach( f =>
45+
val path = s"$dirName/$f"
46+
if path.isDir then visitDirRecursively(path, isModify)
47+
else visitFile(path, isModify)
48+
)
1749

1850
@main
19-
def run_insert_error(): Unit =
20-
for f <- list(replTestDir) do
21-
val fileName = s"$replTestDir/$f"
22-
print(s"\nprocessing: $fileName")
23-
val lines = loadLines(fileName)
24-
var result = Vector[String]()
25-
for i <- lines.indices do
26-
result :+= lines(i)
27-
if lines(i).startsWith("scala>") &&
28-
lines.lift(i + 1).map(_.startsWith("1 | ")).getOrElse(false)
29-
then
30-
result :+= "-- Error:"
31-
32-
val msg =
33-
if lines == result then Console.GREEN + " unmodified" + Console.RESET
34-
else Console.RED + " *** MODIFIED" + Console.RESET
35-
println(msg)
36-
if lines != result then
37-
println("\nbefore ==========>\n" + lines.mkString("\n"))
38-
println("\nafter ==========>\n" + result.mkString("\n"))
39-
saveString(result.mkString("\n"), fileName)
51+
def run_insert_error(isModify: Boolean): Unit =
52+
visitDirRecursively(replTestDir, isModify)

0 commit comments

Comments
 (0)