cleaner graph nodes
This commit is contained in:
+64
-6
@@ -2101,11 +2101,24 @@ def build_indexes():
|
|||||||
if not name or node_type == "unknown" or not fpath:
|
if not name or node_type == "unknown" or not fpath:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Ensure file node exists
|
# ---- File node ---------------------------------------------
|
||||||
file_node_id = f"file::{fpath}"
|
# Keep the same ID (`file::<path>`) but store the full set of
|
||||||
|
# attributes so that downstream code can rely on `name`, `lang`,
|
||||||
|
# and `file` (even though `name` will just be the file path).
|
||||||
if file_node_id not in graph.graph.nodes:
|
if file_node_id not in graph.graph.nodes:
|
||||||
graph.add_node(file_node_id, type="File", path=fpath, lang=lang)
|
graph.add_node(
|
||||||
created_nodes[file_node_id] = {"type": "File", "path": fpath}
|
file_node_id,
|
||||||
|
type="File",
|
||||||
|
name=fpath,
|
||||||
|
path=fpath,
|
||||||
|
lang=lang,
|
||||||
|
)
|
||||||
|
created_nodes[file_node_id] = {
|
||||||
|
"type": "File",
|
||||||
|
"name": fpath,
|
||||||
|
"path": fpath,
|
||||||
|
"lang": lang,
|
||||||
|
}
|
||||||
|
|
||||||
# Create node ID with language
|
# Create node ID with language
|
||||||
node_id = f"{lang}::{node_type}::{fpath}::{name}"
|
node_id = f"{lang}::{node_type}::{fpath}::{name}"
|
||||||
@@ -2260,8 +2273,29 @@ def build_indexes():
|
|||||||
if not candidate_id:
|
if not candidate_id:
|
||||||
# If nothing exists, fall back to a generic import node.
|
# If nothing exists, fall back to a generic import node.
|
||||||
candidate_id = f"import::{imp}"
|
candidate_id = f"import::{imp}"
|
||||||
|
# ---- Import node --------------------------------------------
|
||||||
|
# For imports we want a node that mirrors the target module if
|
||||||
|
# it exists; otherwise we still create a stub with language &
|
||||||
|
# file attributes for consistency.
|
||||||
if candidate_id not in graph.graph.nodes:
|
if candidate_id not in graph.graph.nodes:
|
||||||
graph.add_node(candidate_id, type="Import", name=imp)
|
# First try to find a module node with that name
|
||||||
|
found = False
|
||||||
|
for n_id, n_data in created_nodes.items():
|
||||||
|
if n_data.get("name") == imp and n_data.get("type") == "module":
|
||||||
|
candidate_id = n_id
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
# Generic import stub
|
||||||
|
candidate_id = f"import::{imp}"
|
||||||
|
graph.add_node(
|
||||||
|
candidate_id,
|
||||||
|
type="Import",
|
||||||
|
name=imp,
|
||||||
|
lang="unknown",
|
||||||
|
file="",
|
||||||
|
)
|
||||||
|
graph.add_edge(file_node_id, candidate_id, "imports")
|
||||||
|
|
||||||
graph.add_edge(file_node_id, candidate_id, "imports")
|
graph.add_edge(file_node_id, candidate_id, "imports")
|
||||||
|
|
||||||
@@ -2277,8 +2311,32 @@ def build_indexes():
|
|||||||
if not target_id:
|
if not target_id:
|
||||||
# Fallback to a generic call node.
|
# Fallback to a generic call node.
|
||||||
target_id = f"call::{call}"
|
target_id = f"call::{call}"
|
||||||
|
# ---- Call node ---------------------------------------------
|
||||||
|
# If we already know the target node (by name), reuse it. Otherwise
|
||||||
|
# create a generic node that still carries language & file context
|
||||||
|
# so it can be displayed or filtered later.
|
||||||
if target_id not in graph.graph.nodes:
|
if target_id not in graph.graph.nodes:
|
||||||
graph.add_node(target_id, type="FunctionCall", name=call)
|
# Attempt a best‑effort lookup for the actual function node
|
||||||
|
found = False
|
||||||
|
for n_id, n_data in created_nodes.items():
|
||||||
|
if (
|
||||||
|
n_data.get("name") == call
|
||||||
|
and n_data.get("type") in {"function", "method", "constructor"}
|
||||||
|
):
|
||||||
|
target_id = n_id
|
||||||
|
found = True
|
||||||
|
break
|
||||||
|
if not found:
|
||||||
|
# Fallback to a generic FunctionCall node
|
||||||
|
target_id = f"call::{call}"
|
||||||
|
graph.add_node(
|
||||||
|
target_id,
|
||||||
|
type="FunctionCall",
|
||||||
|
name=call,
|
||||||
|
lang="unknown",
|
||||||
|
file="",
|
||||||
|
)
|
||||||
|
graph.add_edge(node_id, target_id, "calls")
|
||||||
|
|
||||||
graph.add_edge(node_id, target_id, "calls")
|
graph.add_edge(node_id, target_id, "calls")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user