splitPackageOverrideString splits the input string into components based on delimiter characters (:, /, =). A backslash escapes the next char only when that char is one of : / = \ ; any other "\X" sequence is preserved literally so existing inputs containing backslashes are unaffected. Empty entries
(s string)
| 220 | // literally so existing inputs containing backslashes are unaffected. |
| 221 | // Empty entries are preserved; "::5" and ":pterm:5" both return THREE components. |
| 222 | func splitPackageOverrideString(s string) []string { |
| 223 | type span struct { |
| 224 | start int |
| 225 | end int |
| 226 | } |
| 227 | spans := make([]span, 0, 3) |
| 228 | start := 0 |
| 229 | |
| 230 | for i := 0; i < len(s); i++ { |
| 231 | ch := s[i] |
| 232 | if ch == '\\' && i+1 < len(s) && isEscapableDelimiter(s[i+1]) { |
| 233 | i++ |
| 234 | continue |
| 235 | } |
| 236 | if ch == ':' || ch == '/' || ch == '=' { |
| 237 | spans = append(spans, span{start, i}) |
| 238 | start = i + 1 |
| 239 | } |
| 240 | } |
| 241 | spans = append(spans, span{start, len(s)}) |
| 242 | |
| 243 | a := make([]string, len(spans)) |
| 244 | for i, span := range spans { |
| 245 | a[i] = unescapePackageString(s[span.start:span.end]) |
| 246 | } |
| 247 | return a |
| 248 | } |
| 249 | |
| 250 | func unescapePackageString(s string) string { |
| 251 | var result strings.Builder |
no test coverage detected