Documentation
¶
Index ¶
Constants ¶
const ConfigFilename = "Srclibtoolchain"
ConfigFilename is the filename of the toolchain configuration file. The presence of this file in a directory signifies that a srclib toolchain is defined in that directory.
Variables ¶
This section is empty.
Functions ¶
func Add ¶ added in v0.0.3
Add creates a symlink in the SRCLIBPATH so that the toolchain in dir is available at the toolchainPath.
func MarshalArgs ¶
MarshalArgs takes a struct with go-flags field tags and turns it into an equivalent []string for use as command-line args.
Types ¶
type Config ¶
type Config struct {
// Tools is the list of this toolchain's tools and their definitions.
Tools []*ToolInfo
}
Config represents a Srclibtoolchain file, which defines a srclib toolchain.
type Info ¶
type Info struct {
// Path is the toolchain's path (not a directory path) underneath the
// SRCLIBPATH. It consists of the URI of this repository's toolchain plus
// its subdirectory path within the repository. E.g., "github.com/foo/bar"
// for a toolchain defined in the root directory of that repository.
Path string
// Dir is the filesystem directory that defines this toolchain.
Dir string
// ConfigFile is the path to the Srclibtoolchain file, relative to Dir.
ConfigFile string
// Program is the path to the executable program (relative to Dir) to run to
// invoke this toolchain, for the program execution method.
Program string `json:",omitempty"`
// Dockerfile is the path to the Dockerfile (relative to Dir) that defines
// the image to build and run to invoke this toolchain, for the Docker
// container execution method.
Dockerfile string `json:",omitempty"`
}
Info describes a toolchain.
func Get ¶
Get downloads the toolchain named by the toolchain path (if it does not already exist in the SRCLIBPATH).
Assumes that the clone URL is "https://" + path + ".git".
func Lookup ¶
Lookup finds a toolchain by path in the SRCLIBPATH. For each DIR in SRCLIBPATH, it checks for the existence of DIR/PATH/Srclibtoolchain.
func (*Info) ReadConfig ¶
ReadConfig reads and parses the Srclibtoolchain config file for the toolchain.
type Mode ¶
type Mode uint
A Mode value is a set of flags (or 0) that control how toolchains are used.
type Tool ¶
type Tool interface {
// Command returns an *exec.Cmd suitable for running this tool.
Command() (*exec.Cmd, error)
// Run executes this tool with args (sending the JSON-serialization of input
// on stdin, if input is non-nil) and parses the JSON response into resp.
Run(arg []string, input, resp interface{}) error
}
A Tool is a subcommand of a Toolchain that performs an single operation, such as one type of analysis on a source unit.
type ToolInfo ¶
type ToolInfo struct {
// Subcmd is the subcommand name of this tool.
//
// By convention, this is the same as Op in toolchains that only have one
// tool that performs this operation (e.g., a toolchain's "graph" subcommand
// performs the "graph" operation).
Subcmd string
// Op is the operation that this tool performs (e.g., "scan", "graph",
// "deplist", etc.).
Op string
// SourceUnitTypes is a list of source unit types (e.g., "GoPackage") that
// this tool can operate on.
//
// If this tool doesn't operate on source units (for example, it operates on
// directories or repositories, such as the "blame" tools), then this will
// be empty.
//
// TODO(sqs): determine how repository- or directory-level tools will be
// defined.
SourceUnitTypes []string `json:",omitempty"`
}
ToolInfo describes a tool in a toolchain.
type ToolRef ¶
type ToolRef struct {
// Toolchain is the toolchain path of the toolchain that contains this tool.
Toolchain string
// Subcmd is the name of the toolchain subcommand that runs this tool.
Subcmd string
}
A ToolRef identifies a tool inside a specific toolchain. It can be used to look up the tool.
func ChooseTool ¶
ChooseTool determines which toolchain and tool to use to run op (graph, depresolve, etc.) on a source unit of the given type. If no tools fit the criteria, an error is returned.
The selection algorithm is currently very simplistic: if exactly one tool is found that can perform op on the source unit type, it is returned. If zero or more than 1 are found, then an error is returned. TODO(sqs): extend this to choose the "best" tool when multiple tools would suffice.
func ListTools ¶
ListTools lists all tools in all available toolchains (returned by List). If op is non-empty, only tools that perform that operation are returned.
func (ToolRef) MarshalFlag ¶
func (*ToolRef) UnmarshalFlag ¶
type Toolchain ¶
type Toolchain interface {
// Command returns an *exec.Cmd that will execute this toolchain. Do not use
// this to execute a tool in this toolchain; use OpenTool instead.
//
// Do not modify the returned Cmd's Dir field; some implementations of
// Toolchain use dir to construct other parts of the Cmd, so it's important
// that all references to the working directory are consistent.
Command() (*exec.Cmd, error)
// Build prepares the toolchain, if needed. For example, for Dockerized
// toolchains, it builds the Docker image.
Build() error
// IsBuilt returns whether the toolchain is built and can be executed (using
// Command).
IsBuilt() (bool, error)
}
A Toolchain is either a local executable program or a Docker container that wraps such a program. Toolchains contain tools (as subcommands), which perform actions or analysis on a project's source code.