package tools import "strings" // ApplySelection 按 +name / -name 调整默认工具集。 // 规格为空时返回 base 的副本。出现不带正负号的名字时,先用这些名字替换默认集,再应用增减。 // 分隔符为空格、逗号或换行。 func ApplySelection(base []string, spec string) []string { spec = strings.TrimSpace(spec) if spec == "" { return append([]string{}, base...) } fields := strings.FieldsFunc(spec, func(r rune) bool { return r == ',' || r == ' ' || r == '\n' || r == '\t' }) hasBare := false for _, f := range fields { if f != "" && f[0] != '+' && f[0] != '-' { hasBare = true break } } var out []string if !hasBare { out = append(out, base...) } for _, f := range fields { if f == "" { continue } switch f[0] { case '+': out = addName(out, f[1:]) case '-': out = dropName(out, f[1:]) default: out = addName(out, f) } } return out } func addName(names []string, name string) []string { if name == "" { return names } for _, n := range names { if n == name { return names } } return append(names, name) } func dropName(names []string, name string) []string { if name == "" { return names } out := names[:0] for _, n := range names { if n != name { out = append(out, n) } } return out }