Documentation
¶
Index ¶
- Constants
- func NewCallGraphPlugin(callgraphCallback CallgraphCallback) *callgraphPlugin
- func ValidateSignatures(signatures []*callgraphv1.Signature) error
- type CallArgument
- type CallGraph
- type CallGraphNode
- type CallReference
- type CallgraphCallback
- type DfsResultItem
- type EvidenceMetadata
- type MatchedCondition
- type MatchedEvidence
- type SignatureMatchResult
- type SignatureMatcher
- type TreeNodeMetadata
Constants ¶
const ( MatchAny = "any" MatchAll = "all" )
Variables ¶
This section is empty.
Functions ¶
func NewCallGraphPlugin ¶
func NewCallGraphPlugin(callgraphCallback CallgraphCallback) *callgraphPlugin
func ValidateSignatures ¶
func ValidateSignatures(signatures []*callgraphv1.Signature) error
Validates list of callgraphv1.Signature based on protovalidate specification
Types ¶
type CallArgument ¶
type CallArgument struct {
// An argument may be resolved to multiple values (due to assignments)
// For example, a function call may have an argument like `foo(a)` where
// a was assigned to multiple values in the code previously
// eg. `a = 1`, `a = 2`, `a = 3
Nodes []*assignmentNode
}
Refers to one argument passed to a function call For example, in the function call `foo(a, b, c)`, there are three CallArgument instances, one for each of `a`, `b`, and `c
type CallGraph ¶
type CallGraph struct {
FileName string
Nodes map[string]*CallGraphNode
RootNode *CallGraphNode
Tree core.ParseTree
// contains filtered or unexported fields
}
func (*CallGraph) DFS ¶
func (cg *CallGraph) DFS() []DfsResultItem
func (*CallGraph) LimitExceeded ¶
LimitExceeded returns true if processing was truncated due to complexity limits
func (*CallGraph) PrintAssignmentGraph ¶
func (*CallGraph) PrintCallGraph ¶
type CallGraphNode ¶
type CallGraphNode struct {
Namespace string
CallsTo []CallReference
TreeNode *sitter.Node
}
CallGraphNode represents a single node in the call graph
func (*CallGraphNode) Content ¶
func (gn *CallGraphNode) Content(treeData *[]byte) (string, bool)
If tree sitter node is nil, it returns false indicating that the content details are not available else, it returns the content details and true
func (*CallGraphNode) Metadata ¶
func (gn *CallGraphNode) Metadata() (TreeNodeMetadata, bool)
If tree sitter node is nil, it returns false indicating that the content details are not available else, it returns the content details and true
type CallReference ¶
type CallReference struct {
// Namespace of the called function or method
CalleeNamespace string
// Tree sitter node for the called function or method
CalleeTreeNode *sitter.Node
// Identifier keyword node which actually invokes the function call
CallerIdentifier *sitter.Node
// Arguments passed to the function call
Arguments []CallArgument
}
type CallgraphCallback ¶
type CallgraphCallback core.PluginCallback[*CallGraph]
type DfsResultItem ¶
type DfsResultItem struct {
Namespace string
Node *CallGraphNode
Caller *CallGraphNode
CallerIdentifier *sitter.Node // This is the identifier keyword node from which the fn call was made
Arguments []CallArgument
Depth int
Terminal bool
}
func (DfsResultItem) ToString ¶
func (dri DfsResultItem) ToString() string
type EvidenceMetadata ¶
type EvidenceMetadata struct {
CallerNamespace string
CallerMetadata *TreeNodeMetadata
CalleeNamespace string
CalleeMetadata *TreeNodeMetadata
// Keyword / statement that caused the match
CallerIdentifierContent string
CallerIdentifierMetadata *TreeNodeMetadata
}
Note - We're only providing content details for the caller identifier since its expected to be at most one line from the entire file, but callerNamespace is an entire scope (fn/class/module) which consumes a lot of repetitive memory
type MatchedCondition ¶
type MatchedCondition struct {
Condition *callgraphv1.Signature_LanguageMatcher_SignatureCondition
Evidences []MatchedEvidence
}
type MatchedEvidence ¶
type MatchedEvidence struct {
Caller *CallGraphNode
Callee *CallGraphNode
CallerIdentifier *sitter.Node
Arguments []CallArgument
}
func (*MatchedEvidence) Metadata ¶
func (evidence *MatchedEvidence) Metadata(treeData *[]byte) EvidenceMetadata
type SignatureMatchResult ¶
type SignatureMatchResult struct {
FilePath string
MatchedSignature *callgraphv1.Signature
MatchedLanguageCode core.LanguageCode
MatchedConditions []MatchedCondition
}
type SignatureMatcher ¶
type SignatureMatcher struct {
// contains filtered or unexported fields
}
func NewSignatureMatcher ¶
func NewSignatureMatcher(targetSignatures []*callgraphv1.Signature) (*SignatureMatcher, error)
Creates a new SignatureMatcher instance with the provided target signatures. It validates the signatures using the ValidateSignatures function. If the validation fails, it returns an error.
func (*SignatureMatcher) MatchSignatures ¶
func (sm *SignatureMatcher) MatchSignatures(cg *CallGraph) ([]SignatureMatchResult, error)