Files
natsnet/tools/go-analyzer/types.go

100 lines
2.6 KiB
Go

package main
// AnalysisResult holds all extracted data from Go source analysis.
type AnalysisResult struct {
Modules []Module
Dependencies []Dependency
Imports []ImportInfo
}
// TotalFeatures returns the count of all features across all modules.
func (r *AnalysisResult) TotalFeatures() int {
count := 0
for _, m := range r.Modules {
count += len(m.Features)
}
return count
}
// TotalTests returns the count of all tests across all modules.
func (r *AnalysisResult) TotalTests() int {
count := 0
for _, m := range r.Modules {
count += len(m.Tests)
}
return count
}
// Module represents a logical grouping of Go source files.
type Module struct {
Name string
Description string
GoPackage string
GoFile string // primary file or directory
GoLineCount int
Features []Feature
Tests []TestFunc
}
// Feature represents a function or method extracted from Go source.
type Feature struct {
Name string
Description string
GoFile string
GoClass string // receiver type, empty for package-level functions
GoMethod string
GoLineNumber int
GoLineCount int
}
// TestFunc represents a test function extracted from Go source.
type TestFunc struct {
Name string
Description string
GoFile string
GoClass string
GoMethod string
GoLineNumber int
GoLineCount int
// FeatureName links this test to a feature by naming convention
FeatureName string
// Calls holds raw function/method calls extracted from the test body AST
Calls []CallInfo
// LinkedFeatures holds indices into the parent module's Features slice
LinkedFeatures []int
// BestFeatureIdx is the primary feature match index (-1 = none)
BestFeatureIdx int
}
// CallInfo represents a function or method call extracted from a test body.
type CallInfo struct {
FuncName string // direct call name: "newMemStore"
RecvOrPkg string // selector receiver/pkg: "ms", "fmt", "t"
MethodName string // selector method: "StoreMsg", "Fatalf"
IsSelector bool // true for X.Y() form
}
// callKey returns a deduplication key for this call.
func (c CallInfo) callKey() string {
if c.IsSelector {
return c.RecvOrPkg + "." + c.MethodName
}
return c.FuncName
}
// Dependency represents a call relationship between two items.
type Dependency struct {
SourceModule string
SourceFeature string // empty for module-level deps
TargetModule string
TargetFeature string // empty for module-level deps
DependencyKind string // "calls"
}
// ImportInfo represents a Go import path found in source files.
type ImportInfo struct {
ImportPath string
IsStdlib bool
UsedInFiles []string
}