From 023d34191cbcf018ec49847d11c2b3b0523cb309 Mon Sep 17 00:00:00 2001 From: Alberto Carretero Date: Thu, 2 Apr 2026 12:08:04 +0200 Subject: [PATCH] fix: GlobDistance handles / and * correctly --- internal/strdist/strdist.go | 11 ++++++++--- internal/strdist/strdist_test.go | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/strdist/strdist.go b/internal/strdist/strdist.go index d5b640ef..8a653c27 100644 --- a/internal/strdist/strdist.go +++ b/internal/strdist/strdist.go @@ -123,12 +123,17 @@ func globCost(ar, br rune) Cost { if ar == '⁑' || br == '⁑' { return Cost{SwapAB: 0, DeleteA: 0, InsertB: 0} } - if ar == '/' || br == '/' { - return Cost{SwapAB: Inhibit, DeleteA: Inhibit, InsertB: Inhibit} - } if ar == '*' || br == '*' { + if ar == '*' && br == '/' { + return Cost{SwapAB: Inhibit, DeleteA: 0, InsertB: Inhibit} + } else if ar == '/' && br == '*' { + return Cost{SwapAB: Inhibit, DeleteA: Inhibit, InsertB: 0} + } return Cost{SwapAB: 0, DeleteA: 0, InsertB: 0} } + if ar == '/' || br == '/' { + return Cost{SwapAB: Inhibit, DeleteA: Inhibit, InsertB: Inhibit} + } if ar == '?' || br == '?' { return Cost{SwapAB: 0, DeleteA: 1, InsertB: 1} } diff --git a/internal/strdist/strdist_test.go b/internal/strdist/strdist_test.go index 7f8975a0..e1974871 100644 --- a/internal/strdist/strdist_test.go +++ b/internal/strdist/strdist_test.go @@ -58,6 +58,7 @@ var distanceTests = []distanceTest{ {f: strdist.GlobCost, r: 1, a: "a**f/hij", b: "abc/def/hik"}, {f: strdist.GlobCost, r: 2, a: "a**fg", b: "abc/def/hik"}, {f: strdist.GlobCost, r: 0, a: "a**f/hij/klm", b: "abc/d**m"}, + {f: strdist.GlobCost, r: 0, a: "/*foo/", b: "/foo/"}, } func (s *S) TestDistance(c *C) {