Skip to content

Commit db6a2c5

Browse files
committed
chore: add token position info
1 parent 1ad5a18 commit db6a2c5

File tree

6 files changed

+108
-78
lines changed

6 files changed

+108
-78
lines changed
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11

22
[TestNormal - 1]
33
namespace some {
4+
export enum Sex {
5+
Female = 'female',
6+
Male = 'male',
7+
}
48
export enum Status {
59
Todo = 0,
610
Done = 1,
711
Pending = 2,
812
InProgress = 3,
913
}
10-
export enum Sex {
11-
Female = 'female',
12-
Male = 'male',
13-
}
1414
}
1515

1616
---

src/generator/generator.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package generator
22

33
import (
44
"fmt"
5+
"sort"
56
"strconv"
67

78
"github.com/anc95/golang-enum-to-ts/src/ast"
@@ -75,10 +76,16 @@ func GenerateTS(f ast.File) string {
7576
enumValue := getEnum(f)
7677
result := ""
7778

78-
for key, val := range enumValue {
79+
keys := make([]string, 0)
80+
for k, _ := range enumValue {
81+
keys = append(keys, k)
82+
}
83+
sort.Strings(keys)
84+
85+
for _, key := range keys {
7986
ret := ""
8087

81-
for k, v := range val {
88+
for k, v := range enumValue[key] {
8289
if ret != "" {
8390
ret += "\n"
8491
}

src/test-cases/normal.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package some
22

3+
// hello
34
type Status int
45

56
const (

src/token/__snapshots__/token_test.snap

Lines changed: 66 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -4,182 +4,188 @@
44
{
55
Value: "package",
66
Type: "Package",
7-
Start: {0, 6},
8-
End: {0, 0},
7+
Start: {0, 0},
8+
End: {0, 6},
99
},
1010
{
1111
Value: "some",
1212
Type: "Identifier",
13-
Start: {0, 11},
14-
End: {0, 0},
13+
Start: {0, 8},
14+
End: {0, 11},
15+
},
16+
{
17+
Value: " hello\n",
18+
Type: "LineComment",
19+
Start: {2, 1},
20+
End: {2, 8},
1521
},
1622
{
1723
Value: "type",
1824
Type: "Type",
19-
Start: {2, 3},
20-
End: {0, 0},
25+
Start: {3, 0},
26+
End: {3, 3},
2127
},
2228
{
2329
Value: "Status",
2430
Type: "Identifier",
25-
Start: {2, 10},
26-
End: {0, 0},
31+
Start: {3, 5},
32+
End: {3, 10},
2733
},
2834
{
2935
Value: "int",
3036
Type: "IntType",
31-
Start: {2, 14},
32-
End: {0, 0},
37+
Start: {3, 12},
38+
End: {3, 14},
3339
},
3440
{
3541
Value: "const",
3642
Type: "Const",
37-
Start: {4, 5},
38-
End: {0, 0},
43+
Start: {5, 0},
44+
End: {5, 5},
3945
},
4046
{
4147
Value: "(",
4248
Type: "LeftParentheses",
43-
Start: {4, 6},
44-
End: {0, 0},
49+
Start: {5, 6},
50+
End: {5, 6},
4551
},
4652
{
4753
Value: "Todo",
4854
Type: "Identifier",
49-
Start: {5, 4},
50-
End: {0, 0},
55+
Start: {6, 1},
56+
End: {6, 4},
5157
},
5258
{
5359
Value: "Status",
5460
Type: "Identifier",
55-
Start: {5, 11},
56-
End: {0, 0},
61+
Start: {6, 6},
62+
End: {6, 11},
5763
},
5864
{
5965
Value: "=",
6066
Type: "Assignment",
61-
Start: {5, 13},
62-
End: {0, 0},
67+
Start: {6, 13},
68+
End: {6, 13},
6369
},
6470
{
6571
Value: "iota",
6672
Type: "IOTA",
67-
Start: {5, 18},
68-
End: {0, 0},
73+
Start: {6, 15},
74+
End: {6, 18},
6975
},
7076
{
7177
Value: "Done",
7278
Type: "Identifier",
73-
Start: {6, 4},
74-
End: {0, 0},
79+
Start: {7, 1},
80+
End: {7, 4},
7581
},
7682
{
7783
Value: "Pending",
7884
Type: "Identifier",
79-
Start: {7, 7},
80-
End: {0, 0},
85+
Start: {8, 1},
86+
End: {8, 7},
8187
},
8288
{
8389
Value: "InProgress",
8490
Type: "Identifier",
85-
Start: {8, 10},
86-
End: {0, 0},
91+
Start: {9, 1},
92+
End: {9, 10},
8793
},
8894
{
8995
Value: ")",
9096
Type: "RightParentheses",
91-
Start: {9, 0},
92-
End: {0, 0},
97+
Start: {10, 0},
98+
End: {10, 0},
9399
},
94100
{
95101
Value: "type",
96102
Type: "Type",
97-
Start: {11, 3},
98-
End: {0, 0},
103+
Start: {12, 0},
104+
End: {12, 3},
99105
},
100106
{
101107
Value: "Sex",
102108
Type: "Identifier",
103-
Start: {11, 7},
104-
End: {0, 0},
109+
Start: {12, 5},
110+
End: {12, 7},
105111
},
106112
{
107113
Value: "string",
108114
Type: "StringType",
109-
Start: {11, 14},
110-
End: {0, 0},
115+
Start: {12, 9},
116+
End: {12, 14},
111117
},
112118
{
113119
Value: "const",
114120
Type: "Const",
115-
Start: {13, 5},
116-
End: {0, 0},
121+
Start: {14, 0},
122+
End: {14, 5},
117123
},
118124
{
119125
Value: "(",
120126
Type: "LeftParentheses",
121-
Start: {13, 6},
122-
End: {0, 0},
127+
Start: {14, 6},
128+
End: {14, 6},
123129
},
124130
{
125131
Value: "Female",
126132
Type: "Identifier",
127-
Start: {14, 6},
128-
End: {0, 0},
133+
Start: {15, 1},
134+
End: {15, 6},
129135
},
130136
{
131137
Value: "Sex",
132138
Type: "Identifier",
133-
Start: {14, 10},
134-
End: {0, 0},
139+
Start: {15, 8},
140+
End: {15, 10},
135141
},
136142
{
137143
Value: "=",
138144
Type: "Assignment",
139-
Start: {14, 12},
140-
End: {0, 0},
145+
Start: {15, 12},
146+
End: {15, 12},
141147
},
142148
{
143149
Value: "female",
144150
Type: "StringValue",
145-
Start: {14, 21},
146-
End: {0, 0},
151+
Start: {15, 14},
152+
End: {15, 21},
147153
},
148154
{
149155
Value: "Male",
150156
Type: "Identifier",
151-
Start: {15, 4},
152-
End: {0, 0},
157+
Start: {16, 1},
158+
End: {16, 4},
153159
},
154160
{
155161
Value: "Sex",
156162
Type: "Identifier",
157-
Start: {15, 10},
158-
End: {0, 0},
163+
Start: {16, 8},
164+
End: {16, 10},
159165
},
160166
{
161167
Value: "=",
162168
Type: "Assignment",
163-
Start: {15, 12},
164-
End: {0, 0},
169+
Start: {16, 12},
170+
End: {16, 12},
165171
},
166172
{
167173
Value: "male",
168174
Type: "StringValue",
169-
Start: {15, 19},
170-
End: {0, 0},
175+
Start: {16, 14},
176+
End: {16, 19},
171177
},
172178
{
173179
Value: ")",
174180
Type: "RightParentheses",
175-
Start: {16, 0},
176-
End: {0, 0},
181+
Start: {17, 0},
182+
End: {17, 0},
177183
},
178184
{
179185
Value: "func Abctext() {\n\t//dadsad\n}\n",
180186
Type: "Unknown",
181-
Start: {18, 0},
182-
End: {0, 0},
187+
Start: {19, 0},
188+
End: {21, 1},
183189
},
184190
}
185191
---

src/token/parse.go

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,13 @@ func (parser *Parser) appendToken() {
2626

2727
func (parser *Parser) setCurrentTokenType(t TokenType) {
2828
parser.CurrentToken.Type = t
29-
parser.CurrentToken.Start = [2]int{parser.Reader.row, parser.Reader.col}
3029

31-
if t == Unknown {
30+
if len(parser.CurrentToken.Value) == 0 {
31+
parser.CurrentToken.Start = [2]int{parser.Reader.row, parser.Reader.col}
32+
}
33+
34+
switch t {
35+
case Unknown:
3236
parser.CurrentToken.Start = [2]int{parser.Reader.row, 0}
3337

3438
index := len(parser.Tokens) - 1
@@ -44,16 +48,31 @@ func (parser *Parser) setCurrentTokenType(t TokenType) {
4448
parser.Tokens = parser.Tokens[0 : index+1]
4549

4650
parser.CurrentToken.Value = parser.collectUnknown()
47-
} else if t == Assignment {
51+
case Assignment:
4852
parser.CurrentToken.Value = "="
49-
} else if t == LeftParentheses {
53+
case LeftParentheses:
5054
parser.CurrentToken.Value = "("
51-
} else if t == RightParentheses {
55+
case RightParentheses:
5256
parser.CurrentToken.Value = ")"
53-
} else if t == Semicolon {
57+
case Semicolon:
5458
parser.CurrentToken.Value = ";"
59+
case LineComment:
60+
parser.CurrentToken.Value = parser.collectLineComment()
61+
case StringValue:
62+
parser.CurrentToken.Value = parser.collectString()
63+
case IntValue:
64+
parser.CurrentToken.Value = parser.collectInt()
65+
case Identifier:
66+
if len(parser.CurrentToken.Value) > 0 {
67+
break
68+
}
69+
70+
parser.CurrentToken.Value = parser.collectIdentifier()
71+
parser.setCurrentTokenType(parser.getIdentifierTokenType(parser.CurrentToken.Value))
72+
return
5573
}
5674

75+
parser.CurrentToken.End = [2]int{parser.Reader.row, parser.Reader.col}
5776
parser.appendToken()
5877
}
5978

@@ -116,6 +135,7 @@ func (parser *Parser) collectLineComment() string {
116135
result := string(row[parser.Reader.col+1:])
117136

118137
parser.Reader.SkipLine()
138+
parser.Reader.Back()
119139

120140
return result
121141
}
@@ -218,23 +238,19 @@ func (parser *Parser) Parse() []Token {
218238
}
219239

220240
if string(nextCharInByte) == "/" {
221-
parser.CurrentToken.Value = parser.collectLineComment()
222241
parser.setCurrentTokenType(LineComment)
223242
} else if string(nextCharInByte) == "*" {
224243
parser.setCurrentTokenType(LeftParentheses)
225244
} else {
226245
parser.setCurrentTokenType(Unknown)
227246
}
228247
case "\"":
229-
parser.CurrentToken.Value = parser.collectString()
230248
parser.setCurrentTokenType(StringValue)
231249
default:
232250
if IsDigit(charInByte) {
233-
parser.CurrentToken.Value = parser.collectInt()
234251
parser.setCurrentTokenType(IntValue)
235252
} else if IsLetterOrSlash(charInByte) {
236-
parser.CurrentToken.Value = parser.collectIdentifier()
237-
parser.setCurrentTokenType(parser.getIdentifierTokenType(parser.CurrentToken.Value))
253+
parser.setCurrentTokenType(Identifier)
238254
} else {
239255
parser.setCurrentTokenType(Unknown)
240256
}

src/token/reader.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func (reader *Reader) Next() (byte, error) {
6161
}
6262

6363
func (reader *Reader) Back() {
64-
if reader.col == 0 {
64+
if reader.col <= 0 {
6565
reader.row -= 1
6666

6767
if reader.row >= 0 {

0 commit comments

Comments
 (0)