Documentation
¶
Overview ¶
Package fuzzy ranks candidates against what someone has typed.
The matching is what people expect from a command palette: every character of the pattern has to appear in the candidate, in order, and how well it scores depends on where. A match at the start of a word counts for more than one in the middle of one, characters that run together count for more than characters spread out, and a pattern typed in the same case as the candidate counts for a little more than one that was not.
It answers in byte offsets rather than character counts, because what asks is almost always about to draw the candidate with the matched characters picked out, and drawing walks a string by offset.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Match ¶
type Match struct {
// Score is meaningful only against other scores for the same pattern. Higher is
// better, and a match is never worth less than one, so that "matched at all" and
// "did not match" cannot be confused.
Score int
// At is the byte offset in the candidate of each character the pattern matched,
// ascending. An offset can fall inside a grapheme cluster — a pattern character
// can match a combining mark — so something highlighting the matches should ask
// whether a cluster contains an offset rather than begins at one.
At []int
}
Match is how well a candidate answered a pattern.
func Score ¶
Score matches pattern against candidate, case-insensitively, and reports whether it matched at all. An empty pattern matches everything, with nothing highlighted.
What it does not do ¶
It is not a full alignment search. Where a pattern character could bind to several places, this tries the first one and every one that begins a word, and keeps the best of those — which is what makes "st" find the "status" in "test_status" instead of settling for the "st" in "test". A placement that is better for some other reason, in a candidate with no word boundary to hint at it, can still be missed. That is a deliberate stopping point: candidates are palette-sized, patterns are short, and the alternative is a scoring matrix per candidate.
type Ranked ¶
Ranked is one candidate that matched, named by its position in what was searched.
It is an index rather than the string so that a caller ranking its own items — files with a kind, commands with a description — gets back something it can look its own item up with, instead of having to match strings back up afterwards.