@@ -3,16 +3,18 @@ import Foundation
3
3
4
4
final class TokenVisitor : SyntaxRewriter {
5
5
var list = [ String] ( )
6
-
7
6
var tree = [ TreeNode] ( )
8
- var current : TreeNode !
9
7
10
- var index = 0
8
+ private var current : TreeNode !
9
+ private var index = 0
11
10
12
- let converter : SourceLocationConverter
11
+ private let locationConverter : SourceLocationConverter
12
+ private let showMissingTokens : Bool
13
13
14
- init ( converter: SourceLocationConverter ) {
15
- self . converter = converter
14
+ init ( locationConverter: SourceLocationConverter , showMissingTokens: Bool ) {
15
+ self . locationConverter = locationConverter
16
+ self . showMissingTokens = showMissingTokens
17
+ super. init ( viewMode: showMissingTokens ? . all : . sourceAccurate)
16
18
}
17
19
18
20
override func visitPre( _ node: Syntax ) {
@@ -35,7 +37,7 @@ final class TokenVisitor: SyntaxRewriter {
35
37
type = " Syntax "
36
38
}
37
39
38
- let sourceRange = node. sourceRange ( converter: converter )
40
+ let sourceRange = node. sourceRange ( converter: locationConverter )
39
41
let start = sourceRange. start
40
42
let end = sourceRange. end
41
43
@@ -147,6 +149,9 @@ final class TokenVisitor: SyntaxRewriter {
147
149
. htmlEscaped ( )
148
150
. substituteInvisibles ( )
149
151
. transformWhitespaces ( )
152
+ if token. presence == . missing {
153
+ current. class = " \( token. presence) "
154
+ }
150
155
current. token = Token ( kind: " \( token. tokenKind) " , leadingTrivia: " " , trailingTrivia: " " )
151
156
152
157
token. leadingTrivia. forEach { ( piece) in
@@ -182,12 +187,12 @@ final class TokenVisitor: SyntaxRewriter {
182
187
kind = " keyword "
183
188
}
184
189
185
- let sourceRange = token. sourceRange ( converter: converter )
190
+ let sourceRange = token. sourceRange ( converter: locationConverter )
186
191
let start = sourceRange. start
187
192
let end = sourceRange. end
188
- let text = token. presence == . present ? token. text : " "
193
+ let text = token. presence == . present || showMissingTokens ? token. text : " "
189
194
list. append (
190
- " <span class='token \( kind. htmlEscaped ( ) ) ' " +
195
+ " <span class='token \( kind. htmlEscaped ( ) ) \( token . presence ) ' " +
191
196
" data-title=' \( " \( token. trimmed) " . htmlEscaped ( ) . displayInvisibles ( ) ) ' " +
192
197
" data-content=' \( " \( token. tokenKind) " . htmlEscaped ( ) . substituteInvisibles ( ) ) ' " +
193
198
" data-type='Token' " +
0 commit comments