| // Copyright 2019 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Package hooks adds all the standard gopls implementations. |
| // This can be used in tests without needing to use the gopls main, and is |
| // also the place to edit for custom builds of gopls. |
| package hooks // import "golang.org/x/tools/gopls/internal/hooks" |
| |
| import ( |
| "context" |
| "regexp" |
| |
| "golang.org/x/tools/internal/lsp/source" |
| "mvdan.cc/gofumpt/format" |
| "mvdan.cc/xurls/v2" |
| ) |
| |
| func Options(options *source.Options) { |
| if options.GoDiff { |
| options.ComputeEdits = ComputeEdits |
| } |
| options.URLRegexp = urlRegexp() |
| options.GofumptFormat = func(ctx context.Context, src []byte) ([]byte, error) { |
| return format.Source(src, format.Options{}) |
| } |
| updateAnalyzers(options) |
| } |
| |
| func urlRegexp() *regexp.Regexp { |
| // Ensure links are matched as full words, not anywhere. |
| re := regexp.MustCompile(`\b(` + xurls.Relaxed().String() + `)\b`) |
| re.Longest() |
| return re |
| } |