Add util_mermaid callseq renderer, fix forked convrepo store_* corruption
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "breakshaft"
|
name = "breakshaft"
|
||||||
version = "0.1.2"
|
version = "0.1.3"
|
||||||
description = "Library for in-time codegen for type conversion"
|
description = "Library for in-time codegen for type conversion"
|
||||||
authors = [
|
authors = [
|
||||||
{ name = "nikto_b", email = "niktob560@yandex.ru" }
|
{ name = "nikto_b", email = "niktob560@yandex.ru" }
|
||||||
|
|||||||
@@ -146,7 +146,11 @@ class ConvRepo:
|
|||||||
return inner
|
return inner
|
||||||
|
|
||||||
def fork(self, fork_with: Optional[set[ConversionPoint]] = None) -> ConvRepo:
|
def fork(self, fork_with: Optional[set[ConversionPoint]] = None) -> ConvRepo:
|
||||||
return ForkedConvRepo(self, fork_with or None, self.walker, self.renderer)
|
return ForkedConvRepo(self, fork_with or None,
|
||||||
|
self.walker,
|
||||||
|
self.renderer,
|
||||||
|
self.store_callseq,
|
||||||
|
self.store_sources)
|
||||||
|
|
||||||
|
|
||||||
class ForkedConvRepo(ConvRepo):
|
class ForkedConvRepo(ConvRepo):
|
||||||
@@ -156,8 +160,11 @@ class ForkedConvRepo(ConvRepo):
|
|||||||
fork_from: ConvRepo,
|
fork_from: ConvRepo,
|
||||||
fork_with: Optional[set[ConversionPoint]] = None,
|
fork_with: Optional[set[ConversionPoint]] = None,
|
||||||
graph_walker: Optional[GraphWalker] = None,
|
graph_walker: Optional[GraphWalker] = None,
|
||||||
renderer: Optional[ConvertorRenderer] = None):
|
renderer: Optional[ConvertorRenderer] = None,
|
||||||
super().__init__(graph_walker, renderer)
|
store_callseq: bool = False,
|
||||||
|
store_sources: bool = False,
|
||||||
|
):
|
||||||
|
super().__init__(graph_walker, renderer, store_callseq, store_sources)
|
||||||
if fork_with is None:
|
if fork_with is None:
|
||||||
fork_with = set()
|
fork_with = set()
|
||||||
self._convertor_set = fork_with
|
self._convertor_set = fork_with
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ def extract_func_argnames(func: Callable) -> list[str]:
|
|||||||
args_info.append(name)
|
args_info.append(name)
|
||||||
return args_info
|
return args_info
|
||||||
|
|
||||||
|
|
||||||
def extract_return_type(func: Callable) -> Optional[type]:
|
def extract_return_type(func: Callable) -> Optional[type]:
|
||||||
hints = get_type_hints(func)
|
hints = get_type_hints(func)
|
||||||
return hints.get('return')
|
return hints.get('return')
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from .models import Callgraph, TransformationPoint
|
from .models import Callgraph, TransformationPoint, ConversionPoint
|
||||||
from .util import hashname
|
from .util import hashname
|
||||||
|
|
||||||
|
|
||||||
@@ -68,3 +68,14 @@ def draw_callgraph_mermaid(g: Callgraph, split_duplicates=False, skip_title=Fals
|
|||||||
ret += 'flowchart TD\n\n'
|
ret += 'flowchart TD\n\n'
|
||||||
ret += ' %%defs:\n' + '\n'.join(d) + '\n\n %%edges:\n' + '\n'.join(e)
|
ret += ' %%defs:\n' + '\n'.join(d) + '\n\n %%edges:\n' + '\n'.join(e)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def draw_callseq_mermaid(callseq: list[ConversionPoint]):
|
||||||
|
ret = ['flowchart TD\n\n']
|
||||||
|
ret += [' %%defs:']
|
||||||
|
for cp_i, cp in enumerate(callseq):
|
||||||
|
ret.append(f' e{cp_i}[{shield_mermaid_name(str(cp))}]')
|
||||||
|
ret += ['', '', ' %%edges:']
|
||||||
|
for cp_i, cp in enumerate(callseq[:-1]):
|
||||||
|
ret.append(f' e{cp_i}-->e{cp_i + 1}')
|
||||||
|
return '\n'.join(ret)
|
||||||
|
|||||||
Reference in New Issue
Block a user