MCPcopy Index your code
hub / github.com/MadAppGang/dingo / generateGroupedCaseWithAssignment

Method generateGroupedCaseWithAssignment

pkg/codegen/match.go:375–422  ·  view source on GitHub ↗

generateGroupedCaseWithAssignment generates a single case clause with assignment for a group.

(group *armGroup, varName string, typeSwitch bool)

Source from the content-addressed store, hash-verified

373
374// generateGroupedCaseWithAssignment generates a single case clause with assignment for a group.
375func (g *MatchCodeGen) generateGroupedCaseWithAssignment(group *armGroup, varName string, typeSwitch bool) {
376 if len(group.arms) == 0 {
377 return
378 }
379
380 firstArm := group.arms[0]
381
382 // Generate case clause header
383 if group.isDefault {
384 g.Write("default:\n")
385 } else if lit, ok := firstArm.Pattern.(*ast.LiteralPattern); ok {
386 g.Write("case " + lit.Value + ":\n")
387 } else {
388 g.Write("case " + group.typeName + ":\n")
389 }
390
391 // Extract bindings from first arm
392 var bindings []Binding
393 if cp, ok := firstArm.Pattern.(*ast.ConstructorPattern); ok {
394 numParams := len(cp.Params)
395 isTupleVariant := g.isTupleVariant(group.typeName)
396 for i, param := range cp.Params {
397 bindings = append(bindings, g.extractBindings(param, i, numParams, isTupleVariant)...)
398 }
399 } else if vp, ok := firstArm.Pattern.(*ast.VariablePattern); ok {
400 bindings = []Binding{{Name: vp.Name, FieldPath: ""}}
401 }
402
403 // Generate bindings once
404 for _, binding := range bindings {
405 bindingCode := binding.Name + " := "
406 if binding.FieldPath != "" {
407 tempVar := g.scrutineeTempVar
408 if tempVar == "" {
409 tempVar = "v"
410 }
411 bindingCode += tempVar + "." + binding.FieldPath
412 } else {
413 scrutineeResult := GenerateExpr(g.Match.Scrutinee)
414 bindingCode += string(scrutineeResult.Output)
415 }
416 bindingCode += "\n"
417 g.Write(bindingCode)
418 }
419
420 // Generate if/else chain for multiple arms (guards) with assignment
421 g.generateArmsChainWithAssignment(group.arms, varName)
422}
423
424// generateArmsChainWithAssignment generates an if/else chain with assignments.
425func (g *MatchCodeGen) generateArmsChainWithAssignment(arms []*ast.MatchArm, varName string) {

Callers 1

Calls 5

isTupleVariantMethod · 0.95
extractBindingsMethod · 0.95
GenerateExprFunction · 0.85
WriteMethod · 0.45

Tested by

no test coverage detected