// Copyright 2023 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 analysisflags import ( "fmt" "net/url" "golang.org/x/tools/go/analysis" ) // ResolveURL resolves the URL field for a Diagnostic from an Analyzer // and returns the URL. See Diagnostic.URL for details. func ResolveURL(a *analysis.Analyzer, d analysis.Diagnostic) (string, error) { if d.URL == "" && d.Category == "" && a.URL == "" { return "", nil // do nothing } raw := d.URL if d.URL == "" && d.Category != "" { raw = "#" + d.Category } u, err := url.Parse(raw) if err != nil { return "", fmt.Errorf("invalid Diagnostic.URL %q: %s", raw, err) } base, err := url.Parse(a.URL) if err != nil { return "", fmt.Errorf("invalid Analyzer.URL %q: %s", a.URL, err) } return base.ResolveReference(u).String(), nil }