MCPcopy Create free account
hub / github.com/goadesign/goa / patgen

Function patgen

expr/example.go:243–297  ·  view source on GitHub ↗
(re *syntax.Regexp, r *ExampleGenerator)

Source from the content-addressed store, hash-verified

241}
242
243func patgen(re *syntax.Regexp, r *ExampleGenerator) string {
244 switch re.Op {
245 case syntax.OpAlternate:
246 i := r.Int() % len(re.Sub)
247 return patgen(re.Sub[i], r)
248 case syntax.OpCapture:
249 return patgen(re.Sub[0], r)
250 case syntax.OpConcat:
251 var res strings.Builder
252 for _, sub := range re.Sub {
253 res.WriteString(patgen(sub, r))
254 }
255 return res.String()
256 case syntax.OpLiteral:
257 return string(re.Rune)
258 case syntax.OpStar:
259 var res strings.Builder
260 count := r.Int() % 3
261 for range count {
262 res.WriteString(patgen(re.Sub[0], r))
263 }
264 return res.String()
265 case syntax.OpPlus:
266 var res strings.Builder
267 count := r.Int()%2 + 1
268 for range count {
269 res.WriteString(patgen(re.Sub[0], r))
270 }
271 return res.String()
272 case syntax.OpQuest:
273 if r.Int()%2 == 0 {
274 return patgen(re.Sub[0], r)
275 }
276 return ""
277 case syntax.OpRepeat:
278 var res strings.Builder
279 for i := 0; i < re.Min; i++ {
280 res.WriteString(patgen(re.Sub[0], r))
281 }
282 return res.String()
283 case syntax.OpCharClass:
284 var chars []rune
285 for i := 0; i < len(re.Rune); i += 2 {
286 start, end := re.Rune[i], re.Rune[i+1]
287 for j := start; j <= end; j++ {
288 chars = append(chars, j)
289 }
290 }
291 return string(chars[r.Int()%len(chars)])
292 case syntax.OpAnyChar, syntax.OpAnyCharNotNL:
293 return r.Characters(1)
294 default:
295 return ""
296 }
297}
298
299func byMinMax(a *AttributeExpr, r *ExampleGenerator) any {
300 if !hasMinMaxValidation(a) {

Callers 2

byFormatFunction · 0.85
byPatternFunction · 0.85

Calls 3

IntMethod · 0.65
StringMethod · 0.65
CharactersMethod · 0.65

Tested by

no test coverage detected