83d82311fd
Originally the fuzzy matcher required a match in the final candidate segment. For example, to match the candidate "foo.bar", the input had to have at least one character that matched "bar". I previously removed this requirement as it is too restrictive for deep completions to be useful. However, there was still some lingering final-segment favoritism in the matching algorithm. In particular, there were penalties for not matching the final segment's first character and for not matching the final segment's word initial characters. However, these penalties only made sense when we also required a final segment match. Consider this example: User input: "U" Candidate "ErrUnexpectedEOF" - with only a single segment, we got big penalties for not matching the leading "E" (since it is the final segment). Candidate "ErrUnexpectedEOF.Error" - "ErrUnexpectedEOF" is no longer the final segment, so we didn't get penalties. And we didn't get penalties for the final segment "Error" because we finished matching after the first "U". As a result, this candidate slips through with a higher score. Fix by simplifying the skip penalty. Now we only penalize for skipping the first character of the first or final segment (and the penalty is lower). For deep completions, the first and final segment are both "important" segments, so I think it makes sense to focus on both of them. We don't want to penalize all segment starts because that makes it harder to match deeper candidates where you often "ignore" intermediate segments. I had to adjust a few scores in the tests, but I don't think the impact will be too big other than fixing the bug. Fixes golang/go#35062. Change-Id: Id17a5c80bf0f80ce252fe990ccfbd51c1bac1c72 Reviewed-on: https://go-review.googlesource.com/c/tools/+/202638 Reviewed-by: Rebecca Stambler <rstambler@golang.org> Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> |
||
---|---|---|
benchmark/parse | ||
blog | ||
cmd | ||
container/intsets | ||
cover | ||
go | ||
godoc | ||
gopls | ||
imports | ||
internal | ||
playground | ||
present | ||
refactor | ||
.gitattributes | ||
.gitignore | ||
AUTHORS | ||
codereview.cfg | ||
CONTRIBUTING.md | ||
CONTRIBUTORS | ||
go.mod | ||
go.sum | ||
LICENSE | ||
PATENTS | ||
README.md |
Go Tools
This subrepository holds the source for various packages and tools that support the Go programming language.
Some of the tools, godoc
and vet
for example, are included in binary Go
distributions.
Others, including the Go guru
and the test coverage tool, can be fetched with
go get
.
Packages include a type-checker for Go and an implementation of the Static Single Assignment form (SSA) representation for Go programs.
Download/Install
The easiest way to install is to run go get -u golang.org/x/tools/...
. You can
also manually git clone the repository to $GOPATH/src/golang.org/x/tools
.
Report Issues / Send Patches
This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html.
The main issue tracker for the tools repository is located at https://github.com/golang/go/issues. Prefix your issue with "x/tools/(your subdir):" in the subject line, so it is easy to find.