mirror of
https://github.com/junegunn/fzf.git
synced 2025-08-31 20:33:50 -07:00
Fix exact boundary match with --scheme=path or --tiebreak end
Fix #4438
This commit is contained in:
@@ -827,7 +827,7 @@ func exactMatchNaive(caseSensitive bool, normalize bool, forward bool, boundaryC
|
|||||||
|
|
||||||
// For simplicity, only look at the bonus at the first character position
|
// For simplicity, only look at the bonus at the first character position
|
||||||
pidx := 0
|
pidx := 0
|
||||||
bestPos, bonus, bestBonus := -1, int16(0), int16(-1)
|
bestPos, bonus, bbonus, bestBonus := -1, int16(0), int16(0), int16(-1)
|
||||||
for index := 0; index < lenRunes; index++ {
|
for index := 0; index < lenRunes; index++ {
|
||||||
index_ := indexAt(index, lenRunes, forward)
|
index_ := indexAt(index, lenRunes, forward)
|
||||||
char := text.Get(index_)
|
char := text.Get(index_)
|
||||||
@@ -849,7 +849,16 @@ func exactMatchNaive(caseSensitive bool, normalize bool, forward bool, boundaryC
|
|||||||
bonus = bonusAt(text, index_)
|
bonus = bonusAt(text, index_)
|
||||||
}
|
}
|
||||||
if boundaryCheck {
|
if boundaryCheck {
|
||||||
ok = bonus >= bonusBoundary
|
if forward && pidx_ == 0 {
|
||||||
|
bbonus = bonus
|
||||||
|
} else if !forward && pidx_ == lenPattern-1 {
|
||||||
|
if index_ < lenRunes-1 {
|
||||||
|
bbonus = bonusAt(text, index_+1)
|
||||||
|
} else {
|
||||||
|
bbonus = bonusBoundaryWhite
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ok = bbonus >= bonusBoundary
|
||||||
if ok && pidx_ == 0 {
|
if ok && pidx_ == 0 {
|
||||||
ok = index_ == 0 || charClassOf(text.Get(index_-1)) <= charDelimiter
|
ok = index_ == 0 || charClassOf(text.Get(index_-1)) <= charDelimiter
|
||||||
}
|
}
|
||||||
|
@@ -304,11 +304,11 @@ class TestFilter < TestBase
|
|||||||
def test_boundary_match
|
def test_boundary_match
|
||||||
# Underscore boundaries should be ranked lower
|
# Underscore boundaries should be ranked lower
|
||||||
{
|
{
|
||||||
default: [' x '] + %w[/x/ [x] -x- -x_ _x- _x_],
|
default: [' xyz '] + %w[/xyz/ [xyz] -xyz- -xyz_ _xyz- _xyz_],
|
||||||
path: ['/x/', ' x '] + %w[[x] -x- -x_ _x- _x_],
|
path: ['/xyz/', ' xyz '] + %w[[xyz] -xyz- -xyz_ _xyz- _xyz_],
|
||||||
history: ['[x]', '-x-', ' x '] + %w[/x/ -x_ _x- _x_]
|
history: ['[xyz]', '-xyz-', ' xyz '] + %w[/xyz/ -xyz_ _xyz- _xyz_]
|
||||||
}.each do |scheme, expected|
|
}.each do |scheme, expected|
|
||||||
result = `printf -- 'xxx\n-xx\nxx-\n_x_\n_x-\n-x_\n[x]\n-x-\n x \n/x/\n' | #{FZF} -f"'x'" --scheme=#{scheme}`.lines(chomp: true)
|
result = `printf -- 'xxyzx\n-xxyz\nxyzx-\n_xyz_\n_xyz-\n-xyz_\n[xyz]\n-xyz-\n xyz \n/xyz/\n' | #{FZF} -f"'xyz'" --scheme=#{scheme}`.lines(chomp: true)
|
||||||
assert_equal expected, result
|
assert_equal expected, result
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user