Skip to content
This repository was archived by the owner on Mar 10, 2026. It is now read-only.

Commit 1501945

Browse files
authored
Merge pull request #90 from FalkorDB/add-call-line
add call text
2 parents a6f9c06 + 9a9c0d2 commit 1501945

3 files changed

Lines changed: 24 additions & 20 deletions

File tree

api/analyzers/source_analyzer.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,20 +143,23 @@ def second_pass(self, graph: Graph, files: list[Path], path: Path) -> None:
143143
logging.info(f'Processing file ({i + 1}/{files_len}): {file_path}')
144144
for _, entity in file.entities.items():
145145
entity.resolved_symbol(lambda key, symbol: analyzers[file_path.suffix].resolve_symbol(self.files, lsps[file_path.suffix], file_path, path, key, symbol))
146-
for key, symbols in entity.resolved_symbols.items():
146+
for key, symbols in entity.symbols.items():
147147
for symbol in symbols:
148+
if len(symbol.resolved_symbol) == 0:
149+
continue
150+
resolved_symbol = next(iter(symbol.resolved_symbol))
148151
if key == "base_class":
149-
graph.connect_entities("EXTENDS", entity.id, symbol.id)
152+
graph.connect_entities("EXTENDS", entity.id, resolved_symbol.id)
150153
elif key == "implement_interface":
151-
graph.connect_entities("IMPLEMENTS", entity.id, symbol.id)
154+
graph.connect_entities("IMPLEMENTS", entity.id, resolved_symbol.id)
152155
elif key == "extend_interface":
153-
graph.connect_entities("EXTENDS", entity.id, symbol.id)
156+
graph.connect_entities("EXTENDS", entity.id, resolved_symbol.id)
154157
elif key == "call":
155-
graph.connect_entities("CALLS", entity.id, symbol.id)
158+
graph.connect_entities("CALLS", entity.id, resolved_symbol.id, {"line": symbol.symbol.start_point.row, "text": symbol.symbol.text.decode("utf-8")})
156159
elif key == "return_type":
157-
graph.connect_entities("RETURNS", entity.id, symbol.id)
160+
graph.connect_entities("RETURNS", entity.id, resolved_symbol.id)
158161
elif key == "parameters":
159-
graph.connect_entities("PARAMETERS", entity.id, symbol.id)
162+
graph.connect_entities("PARAMETERS", entity.id, resolved_symbol.id)
160163

161164
def analyze_files(self, files: list[Path], path: Path, graph: Graph) -> None:
162165
self.first_pass(path, files, [], graph)

api/entities/entity.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
from typing import Callable, Self
22
from tree_sitter import Node
33

4+
class Symbol:
5+
def __init__(self, symbol: Node):
6+
self.symbol = symbol
7+
self.resolved_symbol = set()
8+
9+
def add_resolve_symbol(self, resolved_symbol):
10+
self.resolved_symbol.add(resolved_symbol)
411

512
class Entity:
613
def __init__(self, node: Node):
714
self.node = node
8-
self.symbols: dict[str, list[Node]] = {}
9-
self.resolved_symbols: dict[str, set[Self]] = {}
15+
self.symbols: dict[str, list[Symbol]] = {}
1016
self.children: dict[Node, Self] = {}
1117

1218
def add_symbol(self, key: str, symbol: Node):
1319
if key not in self.symbols:
1420
self.symbols[key] = []
15-
self.symbols[key].append(symbol)
16-
17-
def add_resolved_symbol(self, key: str, symbol: Self):
18-
if key not in self.resolved_symbols:
19-
self.resolved_symbols[key] = set()
20-
self.resolved_symbols[key].add(symbol)
21+
self.symbols[key].append(Symbol(symbol))
2122

2223
def add_child(self, child: Self):
2324
child.parent = self
2425
self.children[child.node] = child
2526

2627
def resolved_symbol(self, f: Callable[[str, Node], list[Self]]):
2728
for key, symbols in self.symbols.items():
28-
self.resolved_symbols[key] = set()
2929
for symbol in symbols:
30-
for resolved_symbol in f(key, symbol):
31-
self.resolved_symbols[key].add(resolved_symbol)
30+
for resolved_symbol in f(key, symbol.symbol):
31+
symbol.add_resolve_symbol(resolved_symbol)

api/graph.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ def set_file_coverage(self, path: str, name: str, ext: str, coverage: float) ->
479479

480480
res = self._query(q, params)
481481

482-
def connect_entities(self, relation: str, src_id: int, dest_id: int) -> None:
482+
def connect_entities(self, relation: str, src_id: int, dest_id: int, properties: dict = {}) -> None:
483483
"""
484484
Establish a relationship between src and dest
485485
@@ -491,9 +491,10 @@ def connect_entities(self, relation: str, src_id: int, dest_id: int) -> None:
491491
q = f"""MATCH (src), (dest)
492492
WHERE ID(src) = $src_id AND ID(dest) = $dest_id
493493
MERGE (src)-[e:{relation}]->(dest)
494+
SET e += $properties
494495
RETURN e"""
495496

496-
params = {'src_id': src_id, 'dest_id': dest_id}
497+
params = {'src_id': src_id, 'dest_id': dest_id, "properties": properties}
497498
self._query(q, params)
498499

499500
def function_calls_function(self, caller_id: int, callee_id: int, pos: int) -> None:

0 commit comments

Comments
 (0)