@@ -11,24 +11,31 @@ import TastyUnpickler._
11
11
import util .Spans .offsetToInt
12
12
import printing .Highlighting ._
13
13
14
- class TastyPrinter (bytes : Array [Byte ])(using Context ) {
14
+ object TastyPrinter :
15
+ def show (bytes : Array [Byte ])(using Context ): String =
16
+ val printer =
17
+ if ctx.settings.color.value == " never" then new TastyPrinter (bytes)
18
+ else new TastyAnsiiPrinter (bytes)
19
+ printer.showContents()
20
+
21
+ class TastyPrinter (bytes : Array [Byte ]) {
15
22
16
23
private val sb : StringBuilder = new StringBuilder
17
24
18
- val unpickler : TastyUnpickler = new TastyUnpickler (bytes)
25
+ private val unpickler : TastyUnpickler = new TastyUnpickler (bytes)
19
26
import unpickler .{nameAtRef , unpickle }
20
27
21
- def nameToString (name : Name ): String = name.debugString
28
+ private def nameToString (name : Name ): String = name.debugString
22
29
23
- def nameRefToString (ref : NameRef ): String = nameToString(nameAtRef(ref))
30
+ private def nameRefToString (ref : NameRef ): String = nameToString(nameAtRef(ref))
24
31
25
- def printNames (): Unit =
32
+ private def printNames (): Unit =
26
33
for ((name, idx) <- nameAtRef.contents.zipWithIndex) {
27
- val index = nameColor (" %4d" .format(idx))
34
+ val index = nameStr (" %4d" .format(idx))
28
35
sb.append(index).append(" : " ).append(nameToString(name)).append(" \n " )
29
36
}
30
37
31
- def printContents (): String = {
38
+ def showContents (): String = {
32
39
sb.append(" Names:\n " )
33
40
printNames()
34
41
sb.append(" \n " )
@@ -59,13 +66,13 @@ class TastyPrinter(bytes: Array[Byte])(using Context) {
59
66
import reader ._
60
67
var indent = 0
61
68
def newLine () = {
62
- val length = treeColor (" %5d" .format(index(currentAddr) - index(startAddr)))
69
+ val length = treeStr (" %5d" .format(index(currentAddr) - index(startAddr)))
63
70
sb.append(s " \n $length: " + " " * indent)
64
71
}
65
- def printNat () = sb.append(treeColor (" " + readNat()))
72
+ def printNat () = sb.append(treeStr (" " + readNat()))
66
73
def printName () = {
67
74
val idx = readNat()
68
- sb.append(nameColor (" " + idx + " [" + nameRefToString(NameRef (idx)) + " ]" ))
75
+ sb.append(nameStr (" " + idx + " [" + nameRefToString(NameRef (idx)) + " ]" ))
69
76
}
70
77
def printTree (): Unit = {
71
78
newLine()
@@ -74,7 +81,7 @@ class TastyPrinter(bytes: Array[Byte])(using Context) {
74
81
indent += 2
75
82
if (tag >= firstLengthTreeTag) {
76
83
val len = readNat()
77
- sb.append(s " ( ${lengthColor (len.toString)}) " )
84
+ sb.append(s " ( ${lengthStr (len.toString)}) " )
78
85
val end = currentAddr + len
79
86
def printTrees () = until(end)(printTree())
80
87
tag match {
@@ -116,7 +123,7 @@ class TastyPrinter(bytes: Array[Byte])(using Context) {
116
123
}
117
124
indent -= 2
118
125
}
119
- sb.append(i " start = ${reader.startAddr}, base = $base, current = $currentAddr, end = $endAddr\n " )
126
+ sb.append(s " start = ${reader.startAddr}, base = $base, current = $currentAddr, end = $endAddr\n " )
120
127
sb.append(s " ${endAddr.index - startAddr.index} bytes of AST, base = $currentAddr\n " )
121
128
while (! isAtEnd) {
122
129
printTree()
@@ -136,7 +143,7 @@ class TastyPrinter(bytes: Array[Byte])(using Context) {
136
143
sb.append(s " position bytes: \n " )
137
144
val sorted = spans.toSeq.sortBy(_._1.index)
138
145
for ((addr, pos) <- sorted) {
139
- sb.append(treeColor (" %10d" .format(addr.index)))
146
+ sb.append(treeStr (" %10d" .format(addr.index)))
140
147
sb.append(s " : ${offsetToInt(pos.start)} .. ${pos.end}\n " )
141
148
}
142
149
sb.result
@@ -153,14 +160,14 @@ class TastyPrinter(bytes: Array[Byte])(using Context) {
153
160
sb.append(s " comment bytes: \n " )
154
161
val sorted = comments.toSeq.sortBy(_._1.index)
155
162
for ((addr, cmt) <- sorted) {
156
- sb.append(treeColor (" %10d" .format(addr.index)))
163
+ sb.append(treeStr (" %10d" .format(addr.index)))
157
164
sb.append(s " : ${cmt.raw} (expanded = ${cmt.isExpanded}) \n " )
158
165
}
159
166
sb.result
160
167
}
161
168
}
162
169
163
- protected def nameColor (str : String ): String = Magenta ( str).show
164
- protected def treeColor (str : String ): String = Yellow ( str).show
165
- protected def lengthColor (str : String ): String = Cyan ( str).show
170
+ protected def nameStr (str : String ): String = str
171
+ protected def treeStr (str : String ): String = str
172
+ protected def lengthStr (str : String ): String = str
166
173
}
0 commit comments