@@ -2,15 +2,15 @@ import Foundation
2
2
import Basic
3
3
import SwiftSyntax
4
4
5
- class TokenVisitor : SyntaxVisitor {
5
+ struct TokenVisitor : SyntaxAnyVisitor {
6
6
var list = [ String] ( )
7
7
var tree = [ Node] ( )
8
8
var current : Node !
9
9
10
10
var row = 0
11
11
var column = 0
12
12
13
- override func visitPre ( _ node: Syntax ) {
13
+ mutating func visitAny ( _ node: Syntax ) -> SyntaxVisitorContinueKind {
14
14
var syntax = " \( type ( of: node) ) "
15
15
if syntax. hasSuffix ( " Syntax " ) {
16
16
syntax = String ( syntax. dropLast ( 6 ) )
@@ -28,9 +28,11 @@ class TokenVisitor : SyntaxVisitor {
28
28
current. add ( node: node)
29
29
}
30
30
current = node
31
+
32
+ return . visitChildren
31
33
}
32
34
33
- override func visit ( _ token: TokenSyntax ) -> SyntaxVisitorContinueKind {
35
+ mutating func visitPost ( _ token: TokenSyntax ) {
34
36
current. text = escapeHtmlSpecialCharacters ( token. text)
35
37
current. token = Node . Token ( kind: " \( token. tokenKind) " , leadingTrivia: " " , trailingTrivia: " " )
36
38
@@ -52,17 +54,17 @@ class TokenVisitor : SyntaxVisitor {
52
54
current. range. endRow = row
53
55
current. range. endColumn = column
54
56
55
- return . visitChildren
57
+ visitAnyPost ( token ) // NOTE: This is a required call.
56
58
}
57
59
58
- override func visitPost ( _ node: Syntax ) {
60
+ mutating func visitAnyPost ( _ node: Syntax ) {
59
61
list. append ( " </span> " )
60
62
current. range. endRow = row
61
63
current. range. endColumn = column
62
64
current = current. parent
63
65
}
64
66
65
- private func processToken( _ token: TokenSyntax ) {
67
+ private mutating func processToken( _ token: TokenSyntax ) {
66
68
var kind = " \( token. tokenKind) "
67
69
if let index = kind. index ( of: " ( " ) {
68
70
kind = String ( kind. prefix ( upTo: index) )
@@ -75,7 +77,7 @@ class TokenVisitor : SyntaxVisitor {
75
77
column += token. text. count
76
78
}
77
79
78
- private func processTriviaPiece( _ piece: TriviaPiece ) -> String {
80
+ private mutating func processTriviaPiece( _ piece: TriviaPiece ) -> String {
79
81
var trivia = " "
80
82
switch piece {
81
83
case . spaces( let count) :
@@ -117,7 +119,7 @@ class TokenVisitor : SyntaxVisitor {
117
119
return text. replacingOccurrences ( of: " " , with: " ␣ " ) . replacingOccurrences ( of: " <br> " , with: " <br>↲ " )
118
120
}
119
121
120
- private func processComment( text: String ) {
122
+ private mutating func processComment( text: String ) {
121
123
let comments = text. split ( separator: " \n " , omittingEmptySubsequences: false )
122
124
row += comments. count - 1
123
125
column += comments. last!. count
@@ -187,9 +189,9 @@ class Node : Encodable {
187
189
let arguments = Array ( CommandLine . arguments. dropFirst ( ) )
188
190
let filePath = URL ( fileURLWithPath: arguments [ 0 ] )
189
191
190
- let sourceFile = try ! SyntaxTreeParser . parse ( filePath)
191
- let visitor = TokenVisitor ( )
192
- sourceFile. walk ( visitor)
192
+ let sourceFile = try ! SyntaxParser . parse ( filePath)
193
+ var visitor = TokenVisitor ( )
194
+ sourceFile. walk ( & visitor)
193
195
let html = " \( visitor. list. joined ( ) ) "
194
196
195
197
let tree = visitor. tree
0 commit comments