Documentation
¶
Overview ¶
Package dependency provides interfaces and implementations for resolving project dependencies to their source code locations on disk.
Index ¶
- func DetectJavaBuildTool(targetDir string) (string, error)
- func HasJavaManifest(targetDir string) bool
- type CargoResolver
- type Dependency
- type GoResolver
- type GradleResolver
- type JavaResolver
- type JavaRuntimeConfigurer
- type MavenResolver
- type PipResolver
- type Ref
- type Registry
- type ResolveResult
- type Resolver
- type SourceCache
- type WorkspaceMember
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DetectJavaBuildTool ¶
DetectJavaBuildTool inspects the repository root and chooses the Java build tool. It fails clearly if both Maven and Gradle manifests are present at the root.
func HasJavaManifest ¶
HasJavaManifest reports whether the target root contains a supported Java build manifest.
Types ¶
type CargoResolver ¶
type CargoResolver struct{}
CargoResolver resolves Rust/Cargo dependencies using `cargo metadata`.
func NewCargoResolver ¶
func NewCargoResolver() *CargoResolver
NewCargoResolver creates a new Cargo dependency resolver.
func (*CargoResolver) Ecosystem ¶
func (r *CargoResolver) Ecosystem() string
Ecosystem returns "rust".
func (*CargoResolver) Resolve ¶
func (r *CargoResolver) Resolve(ctx context.Context, targetDir string) (*ResolveResult, error)
Resolve uses `cargo metadata --format-version=1` to resolve all dependencies for the Rust project at targetDir.
type Dependency ¶
type Dependency struct {
// Module is the import path (e.g., "golang.org/x/crypto" or "org.example:lib").
Module string
// Version is the resolved version (e.g., "v0.17.0" or "1.2.3").
Version string
// Dir is the absolute filesystem path to the dependency source code.
Dir string
// CompiledArtifactPath is the absolute path to the compiled artifact used for
// type-only indexing when source scanning is unavailable or incomplete.
CompiledArtifactPath string
// SourceArchivePath is the absolute path to the downloaded source archive when
// available. The extracted source directory in Dir remains the preferred scan input.
SourceArchivePath string
}
Dependency represents a single resolved dependency with its source location.
type GoResolver ¶
type GoResolver struct{}
GoResolver resolves Go module dependencies using the `go` tool.
func NewGoResolver ¶
func NewGoResolver() *GoResolver
NewGoResolver creates a new Go dependency resolver.
func (*GoResolver) Resolve ¶
func (r *GoResolver) Resolve(ctx context.Context, targetDir string) (*ResolveResult, error)
Resolve uses `go list -m -json all` to resolve all transitive dependencies for the Go project at targetDir.
type GradleResolver ¶
type GradleResolver struct {
// contains filtered or unexported fields
}
GradleResolver resolves Java/Gradle dependencies using the Gradle wrapper or Gradle CLI.
func NewGradleResolver ¶
func NewGradleResolver() *GradleResolver
NewGradleResolver creates a new Gradle dependency resolver.
func (*GradleResolver) Ecosystem ¶
func (r *GradleResolver) Ecosystem() string
Ecosystem returns "java".
func (*GradleResolver) Resolve ¶
func (r *GradleResolver) Resolve(ctx context.Context, targetDir string) (*ResolveResult, error)
Resolve uses Gradle itself to export a machine-readable dependency model.
func (*GradleResolver) SetJavaRuntime ¶
func (r *GradleResolver) SetJavaRuntime(cfg javaruntime.Config)
SetJavaRuntime configures which Java runtime Gradle commands should use.
type JavaResolver ¶
type JavaResolver struct {
// contains filtered or unexported fields
}
JavaResolver delegates Java dependency resolution to the build-tool-specific resolver detected at the project root.
func NewJavaResolver ¶
func NewJavaResolver() *JavaResolver
NewJavaResolver creates a Java resolver that auto-detects Maven vs Gradle.
func (*JavaResolver) Ecosystem ¶
func (r *JavaResolver) Ecosystem() string
Ecosystem returns "java".
func (*JavaResolver) Resolve ¶
func (r *JavaResolver) Resolve(ctx context.Context, targetDir string) (*ResolveResult, error)
Resolve delegates to the Java build-tool-specific resolver selected for targetDir.
func (*JavaResolver) SetJavaRuntime ¶
func (r *JavaResolver) SetJavaRuntime(cfg javaruntime.Config)
SetJavaRuntime configures which Java runtime Java build-tool resolvers should use.
type JavaRuntimeConfigurer ¶
type JavaRuntimeConfigurer interface {
SetJavaRuntime(cfg javaruntime.Config)
}
JavaRuntimeConfigurer configures which Java runtime a resolver should use for dependency resolution and artifact/type enrichment.
type MavenResolver ¶
type MavenResolver struct {
// contains filtered or unexported fields
}
MavenResolver resolves Java/Maven dependencies using the `mvn` tool.
func NewMavenResolver ¶
func NewMavenResolver() *MavenResolver
NewMavenResolver creates a new Maven dependency resolver.
func (*MavenResolver) Ecosystem ¶
func (r *MavenResolver) Ecosystem() string
Ecosystem returns "java".
func (*MavenResolver) Resolve ¶
func (r *MavenResolver) Resolve(ctx context.Context, targetDir string) (*ResolveResult, error)
Resolve uses Maven CLI to resolve all transitive dependencies for the project at targetDir. For multi-module projects, it uses a three-tier fallback strategy:
Tier 1: mvn dependency:list --fail-never (partial results from reactor) Tier 2: Per-module resolution with -pl <module> (isolate each module) Tier 3: mvn install -DskipTests, then retry Tier 1 (build locally first)
func (*MavenResolver) SetJavaRuntime ¶
func (r *MavenResolver) SetJavaRuntime(cfg javaruntime.Config)
SetJavaRuntime configures which Java runtime Maven commands should use.
type PipResolver ¶
type PipResolver struct {
// contains filtered or unexported fields
}
PipResolver resolves Python dependencies using the `pip` CLI.
func NewPipResolver ¶
func NewPipResolver() *PipResolver
NewPipResolver creates a new Python/pip dependency resolver.
func (*PipResolver) Ecosystem ¶
func (r *PipResolver) Ecosystem() string
Ecosystem returns "python".
func (*PipResolver) Resolve ¶
func (r *PipResolver) Resolve(ctx context.Context, targetDir string) (*ResolveResult, error)
Resolve uses `pip list` and `pip show` to resolve all installed Python packages for the environment associated with the project at targetDir.
type Ref ¶
type Ref struct {
// Module is the dependency coordinate without version (e.g., "org.example:lib").
Module string
// Version is the resolved version for this edge target.
Version string
}
Ref identifies a dependency edge target without requiring a source directory.
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry maps ecosystem names to their resolver implementations.
type ResolveResult ¶
type ResolveResult struct {
// RootModule is the root module path (e.g., "github.com/myorg/myproject")
RootModule string
// WorkspaceMembers lists all local workspace members (for monorepo/workspace projects).
// When non-empty, all members are treated as user code for call chain tracing.
WorkspaceMembers []WorkspaceMember
// Dependencies is the flat list of all resolved dependencies
Dependencies []Dependency
// Graph maps each module path to its direct dependency module paths (adjacency list)
Graph map[string][]string
// VersionedGraph maps each parent node key to its direct dependency targets with versions preserved.
// Parent keys should use the same canonical coordinate form as Ref.Key() when a version is known.
VersionedGraph map[string][]Ref
}
ResolveResult holds the complete dependency resolution output.
type Resolver ¶
type Resolver interface {
// Resolve returns all dependencies for the project at targetDir.
Resolve(ctx context.Context, targetDir string) (*ResolveResult, error)
// Ecosystem returns the name of the ecosystem (e.g., "go", "python", "java", "rust")
Ecosystem() string
}
Resolver resolves a project's dependencies to filesystem paths.
type SourceCache ¶
type SourceCache struct {
// contains filtered or unexported fields
}
SourceCache manages extraction and caching of source archives (JARs, wheels, etc.).
func NewSourceCache ¶
func NewSourceCache() (*SourceCache, error)
NewSourceCache creates a new source cache under ~/.crypto-finder/cache/sources/.
func (*SourceCache) CachedDir ¶
func (c *SourceCache) CachedDir(key, version string) string
CachedDir returns the cached directory for a dependency, or "" if not cached.
func (*SourceCache) ExtractZip ¶
func (c *SourceCache) ExtractZip(archivePath, key, version string, extensions []string) (string, error)
ExtractZip extracts a ZIP/JAR archive to a cache directory, keeping only files matching the given extensions (e.g., []string{".java"}). If extensions is empty, all files are extracted. Returns the extracted directory path, or error.
type WorkspaceMember ¶
type WorkspaceMember struct {
// Name is the module/crate name (e.g., "rustls", "rustls-webpki")
Name string
// Dir is the absolute filesystem path to the member's source root
Dir string
}
WorkspaceMember represents a local/workspace crate or module that is part of the user's project (not an external dependency).