gitlab.com/Raven-IO/raven-delve@v1.22.4/service/dap/config.go (about) 1 package dap 2 3 import ( 4 "bytes" 5 "fmt" 6 "strings" 7 8 "gitlab.com/Raven-IO/raven-delve/pkg/config" 9 ) 10 11 func listConfig(args *launchAttachArgs) string { 12 var buf bytes.Buffer 13 config.ConfigureList(&buf, args, "cfgName") 14 return buf.String() 15 } 16 17 func configureSet(sargs *launchAttachArgs, args string) (bool, string, error) { 18 v := config.Split2PartsBySpace(args) 19 20 cfgname := v[0] 21 var rest string 22 if len(v) == 2 { 23 rest = v[1] 24 } 25 26 field := config.ConfigureFindFieldByName(sargs, cfgname, "cfgName") 27 if !field.CanAddr() { 28 return false, "", fmt.Errorf("%q is not a configuration parameter", cfgname) 29 } 30 31 if cfgname == "substitutePath" { 32 err := configureSetSubstitutePath(sargs, rest) 33 if err != nil { 34 return false, "", err 35 } 36 // Print the updated client to server and server to client maps. 37 return true, config.ConfigureListByName(sargs, cfgname, "cfgName"), nil 38 } 39 40 if cfgname == "showPprofLabels" { 41 err := configureSetShowPprofLabels(sargs, rest) 42 if err != nil { 43 return false, "", err 44 } 45 // Print the updated labels 46 return true, config.ConfigureListByName(sargs, cfgname, "cfgName"), nil 47 } 48 49 err := config.ConfigureSetSimple(rest, cfgname, field) 50 if err != nil { 51 return false, "", err 52 } 53 return true, config.ConfigureListByName(sargs, cfgname, "cfgName"), nil 54 } 55 56 func configureSetSubstitutePath(args *launchAttachArgs, rest string) error { 57 if strings.TrimSpace(rest) == "-clear" { 58 args.substitutePathClientToServer = args.substitutePathClientToServer[:0] 59 args.substitutePathServerToClient = args.substitutePathServerToClient[:0] 60 return nil 61 } 62 argv := config.SplitQuotedFields(rest, '"') 63 if len(argv) == 2 && argv[0] == "-clear" { 64 argv = argv[1:] 65 } 66 switch len(argv) { 67 case 0: 68 // do nothing, let caller show the current list of substitute path rules 69 return nil 70 case 1: // delete substitute-path rule 71 for i := range args.substitutePathClientToServer { 72 if args.substitutePathClientToServer[i][0] == argv[0] { 73 copy(args.substitutePathClientToServer[i:], args.substitutePathClientToServer[i+1:]) 74 args.substitutePathClientToServer = args.substitutePathClientToServer[:len(args.substitutePathClientToServer)-1] 75 copy(args.substitutePathServerToClient[i:], args.substitutePathServerToClient[i+1:]) 76 args.substitutePathServerToClient = args.substitutePathServerToClient[:len(args.substitutePathServerToClient)-1] 77 return nil 78 } 79 } 80 return fmt.Errorf("could not find rule for %q", argv[0]) 81 case 2: // add substitute-path rule 82 for i := range args.substitutePathClientToServer { 83 if args.substitutePathClientToServer[i][0] == argv[0] { 84 args.substitutePathClientToServer[i][1] = argv[1] 85 args.substitutePathServerToClient[i][0] = argv[1] 86 return nil 87 } 88 } 89 args.substitutePathClientToServer = append(args.substitutePathClientToServer, [2]string{argv[0], argv[1]}) 90 args.substitutePathServerToClient = append(args.substitutePathServerToClient, [2]string{argv[1], argv[0]}) 91 92 default: 93 return fmt.Errorf("too many arguments to \"config substitutePath\"") 94 } 95 return nil 96 } 97 98 func configureSetShowPprofLabels(args *launchAttachArgs, rest string) error { 99 if strings.TrimSpace(rest) == "-clear" { 100 args.ShowPprofLabels = args.ShowPprofLabels[:0] 101 return nil 102 } 103 delete := false 104 argv := config.SplitQuotedFields(rest, '"') 105 if len(argv) == 2 && argv[0] == "-clear" { 106 argv = argv[1:] 107 delete = true 108 } 109 switch len(argv) { 110 case 0: 111 // do nothing, let caller show the current list of labels 112 return nil 113 case 1: 114 if delete { 115 for i := range args.ShowPprofLabels { 116 if args.ShowPprofLabels[i] == argv[0] { 117 copy(args.ShowPprofLabels[i:], args.ShowPprofLabels[i+1:]) 118 args.ShowPprofLabels = args.ShowPprofLabels[:len(args.ShowPprofLabels)-1] 119 return nil 120 } 121 } 122 return fmt.Errorf("could not find label %q", argv[0]) 123 } else { 124 args.ShowPprofLabels = append(args.ShowPprofLabels, argv[0]) 125 } 126 default: 127 return fmt.Errorf("too many arguments to \"config showPprofLabels\"") 128 } 129 return nil 130 }