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  }