1
0
mirror of https://github.com/golang/go synced 2024-09-30 22:58:34 -06:00
go/gopls/internal/hooks/hooks.go
Rebecca Stambler 62a0bb781d gopls, internal/lsp: support an extra formatting hook for gofumpt
This change reworks CL 240118 to apply gofumpt directly as a formatter,
not an analyzer. Depending on how gofumpt changes, we may be able to use
it as an analyzer in the future, but for now it's just easier to add it
as a formatting hook.

Fixes golang/go#39805

Change-Id: I227fde4b1916d8a82557f30dfca88e155136dff5
Reviewed-on: https://go-review.googlesource.com/c/tools/+/241985
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
2020-07-13 21:42:47 +00:00

36 lines
1023 B
Go

// 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
}