Skip to content

Commit 85fd79d

Browse files
authored
Merge pull request #304 from jpbetz/full-parser
Extend named parser to also parse chained tags
2 parents b22feca + b37a58d commit 85fd79d

File tree

10 files changed

+1912
-348
lines changed

10 files changed

+1912
-348
lines changed

v2/codetags/extractor.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,18 @@ import (
3636
// Example: When called with prefix "+k8s:", lines:
3737
//
3838
// Comment line without marker
39-
// +k8s:noArgs // comment
39+
// +k8s:noArgs # comment
4040
// +withValue=value1
4141
// +withValue=value2
4242
// +k8s:withArg(arg1)=value1
43-
// +k8s:withArg(arg2)=value2 // comment
43+
// +k8s:withArg(arg2)=value2 # comment
4444
// +k8s:withNamedArgs(arg1=value1, arg2=value2)=value
4545
//
4646
// Then this function will return:
4747
//
4848
// map[string][]string{
49-
// "noArgs": {"noArgs // comment"},
50-
// "withArg": {"withArg(arg1)=value1", "withArg(arg2)=value2 // comment"},
49+
// "noArgs": {"noArgs # comment"},
50+
// "withArg": {"withArg(arg1)=value1", "withArg(arg2)=value2 # comment"},
5151
// "withNamedArgs": {"withNamedArgs(arg1=value1, arg2=value2)=value"},
5252
// }
5353
func Extract(prefix string, lines []string) map[string][]string {
@@ -76,7 +76,7 @@ func findNameEnd(s string) int {
7676
return 0
7777
}
7878
idx := strings.IndexFunc(s, func(r rune) bool {
79-
return !(isIdentInterior(r) || r == ':')
79+
return !(isTagNameInterior(r))
8080
})
8181
if idx == -1 {
8282
return len(s)

v2/codetags/extractor_test.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,12 @@ func TestExtract(t *testing.T) {
147147
}
148148

149149
func TestExtractAndParse(t *testing.T) {
150-
mktags := func(t ...TypedTag) []TypedTag { return t }
150+
mktags := func(t ...Tag) []Tag { return t }
151151

152152
cases := []struct {
153153
name string
154154
comments []string
155-
expect map[string][]TypedTag
155+
expect map[string][]Tag
156156
}{
157157
{
158158
name: "positional params",
@@ -168,54 +168,54 @@ func TestExtractAndParse(t *testing.T) {
168168
"+true(true)",
169169
"+false(false)",
170170
},
171-
expect: map[string][]TypedTag{
171+
expect: map[string][]Tag{
172172
"quoted": mktags(
173-
TypedTag{Name: "quoted", Args: []Arg{
173+
Tag{Name: "quoted", Args: []Arg{
174174
{Value: "value", Type: ArgTypeString},
175175
}},
176176
),
177177
"backticked": mktags(
178-
TypedTag{Name: "backticked", Args: []Arg{
178+
Tag{Name: "backticked", Args: []Arg{
179179
{Value: "value", Type: ArgTypeString},
180180
}},
181181
),
182182
"ident": mktags(
183-
TypedTag{Name: "ident", Args: []Arg{
183+
Tag{Name: "ident", Args: []Arg{
184184
{Value: "value", Type: ArgTypeString},
185185
}},
186186
),
187187
"integer": mktags(
188-
TypedTag{Name: "integer", Args: []Arg{
188+
Tag{Name: "integer", Args: []Arg{
189189
{Value: "2", Type: ArgTypeInt},
190190
}},
191191
),
192192
"negative": mktags(
193-
TypedTag{Name: "negative", Args: []Arg{
193+
Tag{Name: "negative", Args: []Arg{
194194
{Value: "-5", Type: ArgTypeInt},
195195
}},
196196
),
197197
"hex": mktags(
198-
TypedTag{Name: "hex", Args: []Arg{
198+
Tag{Name: "hex", Args: []Arg{
199199
{Value: "0xFF00B3", Type: ArgTypeInt},
200200
}},
201201
),
202202
"octal": mktags(
203-
TypedTag{Name: "octal", Args: []Arg{
203+
Tag{Name: "octal", Args: []Arg{
204204
{Value: "0o04167", Type: ArgTypeInt},
205205
}},
206206
),
207207
"binary": mktags(
208-
TypedTag{Name: "binary", Args: []Arg{
208+
Tag{Name: "binary", Args: []Arg{
209209
{Value: "0b10101", Type: ArgTypeInt},
210210
}},
211211
),
212212
"true": mktags(
213-
TypedTag{Name: "true", Args: []Arg{
213+
Tag{Name: "true", Args: []Arg{
214214
{Value: "true", Type: ArgTypeBool},
215215
}},
216216
),
217217
"false": mktags(
218-
TypedTag{Name: "false", Args: []Arg{
218+
Tag{Name: "false", Args: []Arg{
219219
{Value: "false", Type: ArgTypeBool},
220220
}},
221221
),
@@ -228,23 +228,23 @@ func TestExtractAndParse(t *testing.T) {
228228
"+numbers(n1: 2, n2: -5, n3: 0xFF00B3, n4: 0o04167, n5: 0b10101)",
229229
"+bools(t: true, f:false)",
230230
},
231-
expect: map[string][]TypedTag{
231+
expect: map[string][]Tag{
232232
"strings": mktags(
233-
TypedTag{Name: "strings", Args: []Arg{
233+
Tag{Name: "strings", Args: []Arg{
234234
{Name: "q", Value: "value", Type: ArgTypeString},
235235
{Name: "b", Value: `value`, Type: ArgTypeString},
236236
{Name: "i", Value: "value", Type: ArgTypeString},
237237
}}),
238238
"numbers": mktags(
239-
TypedTag{Name: "numbers", Args: []Arg{
239+
Tag{Name: "numbers", Args: []Arg{
240240
{Name: "n1", Value: "2", Type: ArgTypeInt},
241241
{Name: "n2", Value: "-5", Type: ArgTypeInt},
242242
{Name: "n3", Value: "0xFF00B3", Type: ArgTypeInt},
243243
{Name: "n4", Value: "0o04167", Type: ArgTypeInt},
244244
{Name: "n5", Value: "0b10101", Type: ArgTypeInt},
245245
}}),
246246
"bools": mktags(
247-
TypedTag{Name: "bools", Args: []Arg{
247+
Tag{Name: "bools", Args: []Arg{
248248
{Name: "t", Value: "true", Type: ArgTypeBool},
249249
{Name: "f", Value: "false", Type: ArgTypeBool},
250250
}}),
@@ -254,7 +254,7 @@ func TestExtractAndParse(t *testing.T) {
254254

255255
for _, tc := range cases {
256256
t.Run(tc.name, func(t *testing.T) {
257-
out := map[string][]TypedTag{}
257+
out := map[string][]Tag{}
258258
for name, matchedTags := range Extract("+", tc.comments) {
259259
parsed, err := ParseAll(matchedTags)
260260
if err != nil {

0 commit comments

Comments
 (0)