Documentation ¶
Overview ¶
Package source constructs public URLs that link to the source files in a module. It can be used to build references to Go source code, or to any other files in a module.
Of course, the module zip file contains all the files in the module. This package attempts to find the origin of the zip file, in a repository that is publicly readable, and constructs links to that repo. While a module zip file could in theory come from anywhere, including a non-public location, this package recognizes standard module path patterns and construct repository URLs from them, like the go command does.
Index ¶
- type Client
- type Info
- func (i *Info) DirectoryURL(dir string) string
- func (i *Info) FileURL(pathname string) string
- func (i *Info) LineURL(pathname string, line int) string
- func (i *Info) MarshalJSON() (_ []byte, err error)
- func (i *Info) ModuleURL() string
- func (i *Info) RawURL(pathname string) string
- func (i *Info) RepoURL() string
- func (i *Info) SetCommit(commit string)
- func (i *Info) UnmarshalJSON(data []byte) (err error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func NewClientForTesting ¶
func NewClientForTesting() *Client
NewClientForTesting returns a Client suitable for testing. It returns the same results as an ordinary client for statically recognizable paths, but always returns a nil *Info for dynamic paths (those requiring HTTP requests).
type Info ¶
type Info struct {
// contains filtered or unexported fields
}
Info holds source information about a module, used to generate URLs referring to directories, files and lines.
func FilesInfo ¶
FilesInfo returns an Info that links to a path in the server's /files namespace. The same path needs to be installed via frontend.Server.InstallFS.
func ModuleInfo ¶
ModuleInfo determines the repository corresponding to the module path. It returns a URL to that repo, as well as the directory of the module relative to the repo root.
ModuleInfo may fetch from arbitrary URLs, so it can be slow.
func NewGitHubInfo ¶
NewGitHubInfo creates a source.Info with GitHub URL templates. It is for testing only.
func NewStdlibInfo ¶
NewStdlibInfo returns a source.Info for the standard library at the given semantic version. It panics if the version does not correspond to a Go release tag. It is for testing only.
func (*Info) DirectoryURL ¶
DirectoryURL returns a URL for a directory relative to the module's home directory.
func (*Info) FileURL ¶
FileURL returns a URL for a file whose pathname is relative to the module's home directory.
func (*Info) LineURL ¶
LineURL returns a URL referring to a line in a file relative to the module's home directory.
func (*Info) MarshalJSON ¶
ToJSONForDB returns the Info encoded for storage in the database.
func (*Info) RawURL ¶
RawURL returns a URL referring to the raw contents of a file relative to the module's home directory.
func (*Info) SetCommit ¶
SetCommit overrides commit to a specified commit. Usually, you should pass your version to ModuleInfo(). However, when you do not know the version and just wants a link that points to a known commit/branch/tag. You can use this method to directly override the commit like info.SetCommit("master").
Note this is different from directly passing "master" as version to ModuleInfo(), because for modules not at the root of a repo, there are conventions that add a module's relative dir in front of the version as the actual git tag. For example, for a sub module at ./submod whose version is v1.0.1, the actual git tag should be submod/v1.0.1.