feat(list): Add type aliases for --type flag (gt-pvhsv)
Add convenience aliases for common type names: - mr → merge-request - feat → feature - mol → molecule Applied to bd list, bd ready, and bd export commands. Case-insensitive matching (MR, Mr, mr all work). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,6 +2,23 @@ package util
|
||||
|
||||
import "strings"
|
||||
|
||||
// issueTypeAliases maps shorthand type names to canonical types
|
||||
var issueTypeAliases = map[string]string{
|
||||
"mr": "merge-request",
|
||||
"feat": "feature",
|
||||
"mol": "molecule",
|
||||
}
|
||||
|
||||
// NormalizeIssueType expands type aliases to their canonical forms.
|
||||
// For example: "mr" -> "merge-request", "feat" -> "feature", "mol" -> "molecule"
|
||||
// Returns the input unchanged if it's not an alias.
|
||||
func NormalizeIssueType(t string) string {
|
||||
if canonical, ok := issueTypeAliases[strings.ToLower(t)]; ok {
|
||||
return canonical
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
// NormalizeLabels trims whitespace, removes empty strings, and deduplicates labels
|
||||
// while preserving order.
|
||||
func NormalizeLabels(ss []string) []string {
|
||||
|
||||
@@ -96,9 +96,82 @@ func TestNormalizeLabels(t *testing.T) {
|
||||
func TestNormalizeLabels_PreservesCapacity(t *testing.T) {
|
||||
input := []string{"bug", "critical", "frontend"}
|
||||
result := NormalizeLabels(input)
|
||||
|
||||
|
||||
// Result should have reasonable capacity (not excessive allocation)
|
||||
if cap(result) > len(input)*2 {
|
||||
t.Errorf("NormalizeLabels capacity too large: got %d, input len %d", cap(result), len(input))
|
||||
}
|
||||
}
|
||||
|
||||
func TestNormalizeIssueType(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input string
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "mr alias",
|
||||
input: "mr",
|
||||
expected: "merge-request",
|
||||
},
|
||||
{
|
||||
name: "MR uppercase",
|
||||
input: "MR",
|
||||
expected: "merge-request",
|
||||
},
|
||||
{
|
||||
name: "feat alias",
|
||||
input: "feat",
|
||||
expected: "feature",
|
||||
},
|
||||
{
|
||||
name: "FEAT uppercase",
|
||||
input: "FEAT",
|
||||
expected: "feature",
|
||||
},
|
||||
{
|
||||
name: "mol alias",
|
||||
input: "mol",
|
||||
expected: "molecule",
|
||||
},
|
||||
{
|
||||
name: "Mol mixed case",
|
||||
input: "Mol",
|
||||
expected: "molecule",
|
||||
},
|
||||
{
|
||||
name: "non-alias unchanged",
|
||||
input: "bug",
|
||||
expected: "bug",
|
||||
},
|
||||
{
|
||||
name: "full name unchanged",
|
||||
input: "merge-request",
|
||||
expected: "merge-request",
|
||||
},
|
||||
{
|
||||
name: "empty string",
|
||||
input: "",
|
||||
expected: "",
|
||||
},
|
||||
{
|
||||
name: "feature unchanged",
|
||||
input: "feature",
|
||||
expected: "feature",
|
||||
},
|
||||
{
|
||||
name: "task unchanged",
|
||||
input: "task",
|
||||
expected: "task",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := NormalizeIssueType(tt.input)
|
||||
if result != tt.expected {
|
||||
t.Errorf("NormalizeIssueType(%q) = %q, want %q", tt.input, result, tt.expected)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user