Documentation
¶
Overview ¶
Package link — http_match.go implements W2 of schema 1.9 (cross-language HTTP client → server matching).
The per-language parsers (Go: internal/parse/golang/distributed.go, TS: internal/parse/typescript/http_client.go) detect client-side call sites (fetch/axios in TS, http.Get / http.Client.Get / http.NewRequest in Go) and emit:
- An AMBIGUOUS placeholder Endpoint with Language="external", qname "http:METHOD /path" (or "http:* /path" when the verb is unknown).
- An http_calls edge from the caller Function/Method to that placeholder.
MatchHTTPClients runs ONCE after graph.Build and all per-language parsers have produced their nodes/edges. It walks every placeholder Endpoint and either:
Rewires the http_calls edge to a matching real Endpoint (Language="go" or "ts" — emitted by W1 server-side detection) using the 2-stage cascade specified in schema-1.9-spec §6.9:
a) Specific-verb lookup: `http:METHOD /path` exact match. b) Miss → wildcard fallback: `http:* /path` exact match.
The matcher uses EXACT path matching (§3.3 decision: V0 chooses exact-match over suffix-match because false-positives across distinct services sharing path suffixes — e.g. two microservices each exposing /api/users — are far worse than the false-negatives exact-match incurs in well-curated monorepos).
Leaves the placeholder + edge alone (§6.3 (B)) when no match is found — surfacing the call as an external-API dependency for audit.
Rewired placeholders are deleted from the graph (they have no remaining inbound edges that matter — the `defines` edge from the parser-emitting file is also deleted since the placeholder no longer represents a node in the file). This keeps the final graph tidy: a successful match leaves no AMBIGUOUS Endpoint residue.
Package link runs cross-language linking after per-language Pass 2 (spec §4.7). V0 implements only Sol -> TS bindings via name match. Cross-lang Go links are V1+.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type HTTPMatchResult ¶
type HTTPMatchResult struct {
// Rewired counts http_calls edges whose Dst was successfully redirected
// from a placeholder to a real Endpoint.
Rewired int
// SpecificHits counts rewires that matched on the specific verb (stage 1).
SpecificHits int
// WildcardHits counts rewires that matched on the wildcard fallback (stage 2).
WildcardHits int
// AmbiguousRetained counts placeholder Endpoints that remained in the
// graph because no server-side Endpoint matched (external-API calls).
AmbiguousRetained int
// PlaceholdersDropped counts placeholder Endpoint nodes (and their
// inbound `defines` edges) removed because every http_calls edge using
// them got rewired.
PlaceholdersDropped int
}
HTTPMatchResult captures aggregate counts so callers can log the matching outcome without re-walking the graph.
func MatchHTTPClients ¶
func MatchHTTPClients(nodes []types.Node, edges []types.Edge) ([]types.Node, []types.Edge, HTTPMatchResult)
MatchHTTPClients applies the §6.9 cascade matching pass to nodes/edges, returning the new node/edge slices plus a result summary. The function is pure (no side effects beyond constructing the return values) so the caller can apply the result atomically.
Behaviour:
- Real Endpoint = NodeEndpoint with SubKind="http" and Language != "external".
- Placeholder Endpoint = NodeEndpoint with SubKind="http" and Language="external".
- For each http_calls edge whose Dst is a placeholder: try cascade match. On hit: rewrite Dst; mark placeholder for removal IF no other http_calls edge still points at it. On miss: leave alone.
- Placeholder Endpoint with NO inbound http_calls edges after matching: dropped (shouldn't normally occur — every placeholder is created alongside its http_calls edge).