github.com/undoio/delve@v1.9.0/service/dap/config.go (about) 1 package dap 2 3 import ( 4 "bytes" 5 "fmt" 6 7 "github.com/undoio/delve/pkg/config" 8 ) 9 10 func listConfig(args *launchAttachArgs) string { 11 var buf bytes.Buffer 12 config.ConfigureList(&buf, args, "cfgName") 13 return buf.String() 14 } 15 16 func configureSet(sargs *launchAttachArgs, args string) (bool, string, error) { 17 v := config.Split2PartsBySpace(args) 18 19 cfgname := v[0] 20 var rest string 21 if len(v) == 2 { 22 rest = v[1] 23 } 24 25 field := config.ConfigureFindFieldByName(sargs, cfgname, "cfgName") 26 if !field.CanAddr() { 27 return false, "", fmt.Errorf("%q is not a configuration parameter", cfgname) 28 } 29 30 if cfgname == "substitutePath" { 31 err := configureSetSubstitutePath(sargs, rest) 32 if err != nil { 33 return false, "", err 34 } 35 // Print the updated client to server and server to client maps. 36 return true, config.ConfigureListByName(sargs, cfgname, "cfgName"), nil 37 } 38 39 err := config.ConfigureSetSimple(rest, cfgname, field) 40 if err != nil { 41 return false, "", err 42 } 43 return true, config.ConfigureListByName(sargs, cfgname, "cfgName"), nil 44 } 45 46 func configureSetSubstitutePath(args *launchAttachArgs, rest string) error { 47 argv := config.SplitQuotedFields(rest, '"') 48 switch len(argv) { 49 case 1: // delete substitute-path rule 50 for i := range args.substitutePathClientToServer { 51 if args.substitutePathClientToServer[i][0] == argv[0] { 52 copy(args.substitutePathClientToServer[i:], args.substitutePathClientToServer[i+1:]) 53 args.substitutePathClientToServer = args.substitutePathClientToServer[:len(args.substitutePathClientToServer)-1] 54 copy(args.substitutePathServerToClient[i:], args.substitutePathServerToClient[i+1:]) 55 args.substitutePathServerToClient = args.substitutePathServerToClient[:len(args.substitutePathServerToClient)-1] 56 return nil 57 } 58 } 59 return fmt.Errorf("could not find rule for %q", argv[0]) 60 case 2: // add substitute-path rule 61 for i := range args.substitutePathClientToServer { 62 if args.substitutePathClientToServer[i][0] == argv[0] { 63 args.substitutePathClientToServer[i][1] = argv[1] 64 args.substitutePathServerToClient[i][0] = argv[1] 65 return nil 66 } 67 } 68 args.substitutePathClientToServer = append(args.substitutePathClientToServer, [2]string{argv[0], argv[1]}) 69 args.substitutePathServerToClient = append(args.substitutePathServerToClient, [2]string{argv[1], argv[0]}) 70 71 default: 72 return fmt.Errorf("too many arguments to \"config substitute-path\"") 73 } 74 return nil 75 }