Add util_mermaid callseq renderer, fix forked convrepo store_* corruption
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "breakshaft"
|
||||
version = "0.1.2"
|
||||
version = "0.1.3"
|
||||
description = "Library for in-time codegen for type conversion"
|
||||
authors = [
|
||||
{ name = "nikto_b", email = "niktob560@yandex.ru" }
|
||||
|
||||
@@ -146,7 +146,11 @@ class ConvRepo:
|
||||
return inner
|
||||
|
||||
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):
|
||||
@@ -156,8 +160,11 @@ class ForkedConvRepo(ConvRepo):
|
||||
fork_from: ConvRepo,
|
||||
fork_with: Optional[set[ConversionPoint]] = None,
|
||||
graph_walker: Optional[GraphWalker] = None,
|
||||
renderer: Optional[ConvertorRenderer] = None):
|
||||
super().__init__(graph_walker, renderer)
|
||||
renderer: Optional[ConvertorRenderer] = None,
|
||||
store_callseq: bool = False,
|
||||
store_sources: bool = False,
|
||||
):
|
||||
super().__init__(graph_walker, renderer, store_callseq, store_sources)
|
||||
if fork_with is None:
|
||||
fork_with = set()
|
||||
self._convertor_set = fork_with
|
||||
|
||||
@@ -12,6 +12,7 @@ def extract_func_argnames(func: Callable) -> list[str]:
|
||||
args_info.append(name)
|
||||
return args_info
|
||||
|
||||
|
||||
def extract_return_type(func: Callable) -> Optional[type]:
|
||||
hints = get_type_hints(func)
|
||||
return hints.get('return')
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from .models import Callgraph, TransformationPoint
|
||||
from .models import Callgraph, TransformationPoint, ConversionPoint
|
||||
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 += ' %%defs:\n' + '\n'.join(d) + '\n\n %%edges:\n' + '\n'.join(e)
|
||||
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