commit | 83d82311fd1f3a51bb8d03f6f8197c33e0b762a4 | [log] [tgz] |
---|---|---|
author | Muir Manders <muir@mnd.rs> | Tue Oct 22 09:28:04 2019 -0700 |
committer | Rebecca Stambler <rstambler@golang.org> | Tue Oct 22 21:05:28 2019 +0000 |
tree | bd9f10aff4cc993cc6406056200afb53986698cc | |
parent | a12cc76b85f46f497931e5d4ae098d5976beade2 [diff] |
internal/lsp: fix fuzzy matcher inconsistency 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>
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.
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
.
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.