|
| 1 | +from swift_code_metrics._helpers import ReportingHelpers |
1 | 2 | from swift_code_metrics._metrics import Metrics |
2 | 3 | from ._graphics import Graph |
| 4 | +from functional import seq |
| 5 | +from math import ceil |
| 6 | + |
3 | 7 |
|
4 | 8 | class GraphPresenter: |
5 | 9 | def __init__(self, artifacts_path): |
@@ -61,33 +65,34 @@ def distance_from_main_sequence_plot(self, list_of_frameworks, x_ax_f_framework, |
61 | 65 | scattered_data, |
62 | 66 | bands) |
63 | 67 |
|
64 | | - def dependency_graph(self, list_of_frameworks): |
| 68 | + def dependency_graph(self, list_of_frameworks, total_code, total_imports): |
65 | 69 | """ |
66 | 70 | Renders the Frameworks dependency graph. |
67 | 71 | """ |
68 | 72 |
|
69 | | - internal_edges = list() |
70 | | - external_edges = list() |
| 73 | + nodes = seq(list_of_frameworks).map(lambda fr: (fr.name, ceil(10 * fr.loc / total_code))).list() |
71 | 74 |
|
72 | | - for f in list_of_frameworks: |
73 | | - # Internal dependencies graph |
74 | | - internal_dep = Metrics.internal_dependencies(f, list_of_frameworks) |
75 | | - for ind in internal_dep: |
76 | | - internal_edges.append((ind.name, ind.dependent_framework, ind.number_of_imports, 'forestgreen')) |
| 75 | + internal_edges = seq(list_of_frameworks) \ |
| 76 | + .flat_map(lambda fr: Metrics.internal_dependencies(fr, list_of_frameworks)) \ |
| 77 | + .map(lambda ind: GraphPresenter.__make_edge(ind, total_imports, 'forestgreen')) |
77 | 78 |
|
78 | | - # External dependencies graph |
79 | | - external_dep = Metrics.external_dependencies(f, list_of_frameworks) |
80 | | - for ed in external_dep: |
81 | | - external_edges.append((f.name, ed.dependent_framework, ed.number_of_imports, 'orangered')) |
| 79 | + external_edges = seq(list_of_frameworks) \ |
| 80 | + .flat_map(lambda fr: Metrics.external_dependencies(fr, list_of_frameworks)) \ |
| 81 | + .map(lambda ed: GraphPresenter.__make_edge(ed, total_imports, 'orangered')) |
82 | 82 |
|
83 | | - self.__render_directed_graph('Internal dependencies graph', internal_edges) |
84 | | - self.__render_directed_graph('External dependencies graph', external_edges) |
| 83 | + self.__render_directed_graph('Internal dependencies graph', nodes, internal_edges) |
| 84 | + self.__render_directed_graph('External dependencies graph', nodes, external_edges) |
85 | 85 |
|
86 | 86 | # Total |
87 | | - self.__render_directed_graph('Dependencies graph', internal_edges + external_edges) |
| 87 | + self.__render_directed_graph('Dependencies graph', nodes, internal_edges + external_edges) |
| 88 | + |
| 89 | + @staticmethod |
| 90 | + def __make_edge(dep, total_imports, color): |
| 91 | + return (dep.name, dep.dependent_framework, dep.number_of_imports, |
| 92 | + ceil(10 * dep.number_of_imports / total_imports), color) |
88 | 93 |
|
89 | | - def __render_directed_graph(self, title, edges): |
| 94 | + def __render_directed_graph(self, title, nodes, edges): |
90 | 95 | try: |
91 | | - self.graph.directed_graph(title, edges) |
| 96 | + self.graph.directed_graph(title, nodes, edges) |
92 | 97 | except ValueError: |
93 | 98 | print('Please ensure that you have Graphviz (https://www.graphviz.org/download) installed.') |
0 commit comments