dependency

package
v0.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 2, 2026 License: GPL-2.0, GPL-2.0-only Imports: 27 Imported by: 0

Documentation

Overview

Package dependency provides interfaces and implementations for resolving project dependencies to their source code locations on disk.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DetectJavaBuildTool

func DetectJavaBuildTool(targetDir string) (string, error)

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

func HasJavaManifest(targetDir string) bool

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) Ecosystem

func (r *GoResolver) Ecosystem() string

Ecosystem returns "go".

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.

func (Ref) Key

func (d Ref) Key() string

Key returns the canonical coordinate for this dependency reference.

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

Registry maps ecosystem names to their resolver implementations.

func NewRegistry

func NewRegistry() *Registry

NewRegistry creates a new empty resolver registry.

func (*Registry) Get

func (r *Registry) Get(name string) (Resolver, error)

Get returns the resolver for the given ecosystem name.

func (*Registry) Register

func (r *Registry) Register(name string, resolver Resolver)

Register adds a resolver for the given ecosystem name.

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).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL