@@ -16,11 +16,40 @@ final class TokenVisitor: SyntaxRewriter {
16
16
}
17
17
18
18
override func visitPre( _ node: Syntax ) {
19
- var syntax = " \( node. syntaxNodeType) "
20
- if syntax. hasSuffix ( " Syntax " ) {
21
- syntax = String ( syntax. dropLast ( 6 ) )
19
+ let syntaxNodeType = node. syntaxNodeType
20
+
21
+ let className : String
22
+ if " \( syntaxNodeType) " . hasSuffix ( " Syntax " ) {
23
+ className = String ( " \( syntaxNodeType) " . dropLast ( 6 ) )
24
+ } else {
25
+ className = " \( syntaxNodeType) "
26
+ }
27
+
28
+ let content : String
29
+ let type : String
30
+ if let tokenSyntax = node. as ( TokenSyntax . self) {
31
+ content = " \( tokenSyntax. tokenKind) "
32
+ type = " Token "
33
+ } else {
34
+ content = " \( syntaxNodeType) "
35
+ type = " Syntax "
22
36
}
23
- list. append ( " <span class=' \( syntax) ' data-title='Syntax' data-content=' \( syntax) '> " )
37
+
38
+ let sourceRange = node. sourceRange ( converter: converter)
39
+ let start = sourceRange. start
40
+ let end = sourceRange. end
41
+ let startRow = start. line ?? 1
42
+ let startColumn = start. column ?? 1
43
+ let endRow = end. line ?? 1
44
+ let endColumn = end. column ?? 1
45
+
46
+ list. append (
47
+ " <span class=' \( className) ' " +
48
+ " data-title=' \( " \( node. withoutTrivia ( ) ) " . replacingOccurrences ( of: " \n " , with: " ↲ " ) ) ' " +
49
+ " data-content=' \( content) ' " +
50
+ " data-type=' \( type) ' " +
51
+ #"data-range='{"startRow": \#( startRow) ,"startColumn": \#( startColumn) ,"endRow": \#( endRow) ,"endColumn": \#( endColumn) }'>"#
52
+ )
24
53
25
54
let syntaxType : SyntaxType
26
55
switch node {
@@ -36,18 +65,14 @@ final class TokenVisitor: SyntaxRewriter {
36
65
syntaxType = . other
37
66
}
38
67
39
- let sourceRange = node. sourceRange ( converter: converter)
40
- let start = sourceRange. start
41
- let end = sourceRange. end
42
-
43
68
let treeNode = TreeNode (
44
69
id: index,
45
- text: syntax ,
70
+ text: className ,
46
71
range: Range (
47
- startRow: start . line . flatMap { $0 } ?? 1 ,
48
- startColumn: start . column . flatMap { $0 } ?? 1 ,
49
- endRow: end . line . flatMap { $0 } ?? 1 ,
50
- endColumn: end . column . flatMap { $0 } ?? 1
72
+ startRow: startRow ,
73
+ startColumn: startColumn ,
74
+ endRow: endRow ,
75
+ endColumn: endColumn
51
76
) ,
52
77
type: syntaxType
53
78
)
@@ -134,14 +159,26 @@ final class TokenVisitor: SyntaxRewriter {
134
159
kind = " keyword "
135
160
}
136
161
162
+ let sourceRange = token. sourceRange ( converter: converter)
163
+ let start = sourceRange. start
164
+ let end = sourceRange. end
165
+ let startRow = start. line ?? 1
166
+ let startColumn = start. column ?? 1
167
+ let endRow = end. line ?? 1
168
+ let endColumn = end. column ?? 1
137
169
list. append (
138
- " <span class='token \( kind) ' data-title='Token' data-content=' \( token. tokenKind) '> \( escapeHtmlSpecialCharacters ( token. text) ) </span> "
170
+ " <span class='token \( kind) ' " +
171
+ " data-title=' \( token. withoutTrivia ( ) ) ' " +
172
+ " data-content=' \( token. tokenKind) ' " +
173
+ " data-type='Token' " +
174
+ #"data-range='{"startRow": \#( startRow) ,"startColumn": \#( startColumn) ,"endRow": \#( endRow) ,"endColumn": \#( endColumn) }'>"# +
175
+ " \( escapeHtmlSpecialCharacters ( token. text) ) </span> "
139
176
)
140
177
}
141
178
142
179
private func processTriviaPiece( _ piece: TriviaPiece ) -> String {
143
180
func wrapWithSpanTag( class c: String , text: String ) -> String {
144
- " <span class=' \( c) ' data-title='Trivia ' data-content=' \( c) '> \( escapeHtmlSpecialCharacters ( text) ) </span> "
181
+ " <span class=' \( c) ' data-title=' \( piece ) ' data-content=' \( c) ' data-type='Trivia '>\( escapeHtmlSpecialCharacters ( text) ) </span> "
145
182
}
146
183
147
184
var trivia = " "
0 commit comments