mirror of
https://github.com/Llewellynvdm/fzf.git
synced 2024-11-26 14:56:30 +00:00
Fix Transform result cache to speed up subsequent searches
This commit is contained in:
parent
4f40314433
commit
ca4bdfb4bd
@ -10,9 +10,9 @@ type Offset [2]int32
|
||||
type Item struct {
|
||||
text *string
|
||||
origText *string
|
||||
transformed *Transformed
|
||||
offsets []Offset
|
||||
rank Rank
|
||||
transformed *Transformed
|
||||
}
|
||||
|
||||
type Rank struct {
|
||||
|
@ -229,16 +229,22 @@ func (p *Pattern) Match(chunk *Chunk) []*Item {
|
||||
return matches
|
||||
}
|
||||
|
||||
func dupItem(item *Item, offsets []Offset) *Item {
|
||||
return &Item{
|
||||
text: item.text,
|
||||
origText: item.origText,
|
||||
transformed: item.transformed,
|
||||
offsets: offsets,
|
||||
rank: Rank{0, 0, item.rank.index}}
|
||||
}
|
||||
|
||||
func (p *Pattern) fuzzyMatch(chunk *Chunk) []*Item {
|
||||
matches := []*Item{}
|
||||
for _, item := range *chunk {
|
||||
input := p.prepareInput(item)
|
||||
if sidx, eidx := p.iter(FuzzyMatch, input, p.text); sidx >= 0 {
|
||||
matches = append(matches, &Item{
|
||||
text: item.text,
|
||||
origText: item.origText,
|
||||
offsets: []Offset{Offset{int32(sidx), int32(eidx)}},
|
||||
rank: Rank{0, 0, item.rank.index}})
|
||||
matches = append(matches,
|
||||
dupItem(item, []Offset{Offset{int32(sidx), int32(eidx)}}))
|
||||
}
|
||||
}
|
||||
return matches
|
||||
@ -262,11 +268,7 @@ func (p *Pattern) extendedMatch(chunk *Chunk) []*Item {
|
||||
}
|
||||
}
|
||||
if len(offsets) == len(p.terms) {
|
||||
matches = append(matches, &Item{
|
||||
text: item.text,
|
||||
origText: item.origText,
|
||||
offsets: offsets,
|
||||
rank: Rank{0, 0, item.rank.index}})
|
||||
matches = append(matches, dupItem(item, offsets))
|
||||
}
|
||||
}
|
||||
return matches
|
||||
|
@ -86,19 +86,25 @@ func TestCaseSensitivity(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestOrigText(t *testing.T) {
|
||||
func TestOrigTextAndTransformed(t *testing.T) {
|
||||
strptr := func(str string) *string {
|
||||
return &str
|
||||
}
|
||||
|
||||
pattern := BuildPattern(MODE_EXTENDED, CASE_SMART, []Range{}, nil, []rune("jg"))
|
||||
tokens := Tokenize(strptr("junegunn"), nil)
|
||||
trans := Transform(tokens, []Range{Range{1, 1}})
|
||||
|
||||
for _, fun := range []func(*Chunk) []*Item{pattern.fuzzyMatch, pattern.extendedMatch} {
|
||||
chunk := Chunk{
|
||||
&Item{text: strptr("junegunn"), origText: strptr("junegunn.choi")},
|
||||
&Item{
|
||||
text: strptr("junegunn"),
|
||||
origText: strptr("junegunn.choi"),
|
||||
transformed: trans},
|
||||
}
|
||||
matches := fun(&chunk)
|
||||
if *matches[0].text != "junegunn" || *matches[0].origText != "junegunn.choi" ||
|
||||
matches[0].offsets[0][0] != 0 || matches[0].offsets[0][1] != 5 {
|
||||
matches[0].offsets[0][0] != 0 || matches[0].offsets[0][1] != 5 ||
|
||||
matches[0].transformed != trans {
|
||||
t.Error("Invalid match result", matches)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user