internal/lsp: link to the new pkg.go.dev instead of godoc.org
Updates golang/go#35563
Change-Id: I88ae3f742daf5043d4784fe8827454fb1ce1f9db
Reviewed-on: https://go-review.googlesource.com/c/tools/+/209337
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/gopls/doc/settings.md b/gopls/doc/settings.md
index 8cf60d5..4e99a19 100644
--- a/gopls/doc/settings.md
+++ b/gopls/doc/settings.md
@@ -46,6 +46,16 @@
Default: `false`.
+### **linkTarget** *string*
+
+This controls where points documentation for given package in `textDocument/documentLink`.
+It might be one of:
+* `"godoc.org"`
+* `"pkg.go.dev"`
+If company chooses to use its own `godoc.org`, it's address can be used as well.
+
+Default: `"pkg.go.dev"`.
+
## Experimental
The below settings are considered experimental. They may be deprecated or changed in the future. They are typically used to test experimental opt-in features or to disable features.
diff --git a/internal/lsp/link.go b/internal/lsp/link.go
index c9f89f2..86e6084 100644
--- a/internal/lsp/link.go
+++ b/internal/lsp/link.go
@@ -6,6 +6,7 @@
import (
"context"
+ "fmt"
"go/ast"
"go/token"
"regexp"
@@ -47,7 +48,7 @@
if target == "" {
return false
}
- target = "https://godoc.org/" + target
+ target = fmt.Sprintf("https://%s/%s", view.Options().LinkTarget, target)
l, err := toProtocolLink(view, m, target, n.Path.Pos()+1, n.Path.End()-1)
if err != nil {
log.Error(ctx, "cannot initialize DocumentLink", err, tag.Of("Path", n.Path.Value))
diff --git a/internal/lsp/source/options.go b/internal/lsp/source/options.go
index f049091..4770351 100644
--- a/internal/lsp/source/options.go
+++ b/internal/lsp/source/options.go
@@ -69,6 +69,7 @@
ComputeEdits: myers.ComputeEdits,
Analyzers: defaultAnalyzers,
GoDiff: true,
+ LinkTarget: "pkg.go.dev",
}
)
@@ -110,6 +111,8 @@
LocalPrefix string
VerboseOutput bool
+
+ LinkTarget string
}
type CompletionOptions struct {
@@ -164,6 +167,8 @@
OptionUnexpected
)
+type LinkTarget string
+
func SetOptions(options *Options, opts interface{}) OptionResults {
var results OptionResults
switch opts := opts.(type) {
@@ -265,6 +270,14 @@
result.errorf("Unsupported hover kind", tag.Of("HoverKind", hoverKind))
}
+ case "linkTarget":
+ linkTarget, ok := value.(string)
+ if !ok {
+ result.errorf("invalid type %T for string option %q", value, name)
+ break
+ }
+ o.LinkTarget = linkTarget
+
case "experimentalDisabledAnalyses":
disabledAnalyses, ok := value.([]interface{})
if !ok {
diff --git a/internal/lsp/testdata/links/links.go b/internal/lsp/testdata/links/links.go
index f726e38..e2be5b6 100644
--- a/internal/lsp/testdata/links/links.go
+++ b/internal/lsp/testdata/links/links.go
@@ -1,13 +1,13 @@
package links
import (
- "fmt" //@link(`fmt`,"https://godoc.org/fmt")
+ "fmt" //@link(`fmt`,"https://pkg.go.dev/fmt")
- "golang.org/x/tools/internal/lsp/foo" //@link(`golang.org/x/tools/internal/lsp/foo`,`https://godoc.org/golang.org/x/tools/internal/lsp/foo`)
+ "golang.org/x/tools/internal/lsp/foo" //@link(`golang.org/x/tools/internal/lsp/foo`,`https://pkg.go.dev/golang.org/x/tools/internal/lsp/foo`)
- _ "database/sql" //@link(`database/sql`, `https://godoc.org/database/sql`)
+ _ "database/sql" //@link(`database/sql`, `https://pkg.go.dev/database/sql`)
- errors "golang.org/x/xerrors" //@link(`golang.org/x/xerrors`, `https://godoc.org/golang.org/x/xerrors`)
+ errors "golang.org/x/xerrors" //@link(`golang.org/x/xerrors`, `https://pkg.go.dev/golang.org/x/xerrors`)
)
var (