@aiready/context-analyzer 0.21.22 → 0.21.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +26 -25
- package/.turbo/turbo-lint.log +5 -5
- package/.turbo/turbo-test.log +104 -41
- package/coverage/clover.xml +2615 -1242
- package/coverage/coverage-final.json +30 -13
- package/coverage/dist/chunk-64U3PNO3.mjs.html +367 -0
- package/coverage/dist/chunk-J3MUOWHC.mjs.html +5326 -0
- package/coverage/dist/index.html +146 -0
- package/coverage/{classifier.ts.html → dist/index.mjs.html} +537 -912
- package/coverage/index.html +84 -189
- package/coverage/src/analyzer.ts.html +88 -0
- package/coverage/src/analyzers/index.html +116 -0
- package/coverage/src/analyzers/python-context.ts.html +910 -0
- package/coverage/{ast-utils.ts.html → src/ast-utils.ts.html} +84 -54
- package/coverage/src/classifier.ts.html +892 -0
- package/coverage/src/classify/classification-patterns.ts.html +307 -0
- package/coverage/src/classify/file-classifiers.ts.html +973 -0
- package/coverage/src/classify/index.html +131 -0
- package/coverage/{cluster-detector.ts.html → src/cluster-detector.ts.html} +154 -91
- package/coverage/{defaults.ts.html → src/defaults.ts.html} +74 -65
- package/coverage/{graph-builder.ts.html → src/graph-builder.ts.html} +268 -229
- package/coverage/src/index.html +341 -0
- package/coverage/{index.ts.html → src/index.ts.html} +70 -13
- package/coverage/{scoring.ts.html → src/issue-analyzer.ts.html} +201 -261
- package/coverage/src/mapper.ts.html +439 -0
- package/coverage/{metrics.ts.html → src/metrics.ts.html} +201 -132
- package/coverage/src/orchestrator.ts.html +493 -0
- package/coverage/{provider.ts.html → src/provider.ts.html} +21 -21
- package/coverage/{remediation.ts.html → src/remediation.ts.html} +112 -52
- package/coverage/src/report/console-report.ts.html +415 -0
- package/coverage/src/report/html-report.ts.html +361 -0
- package/coverage/src/report/index.html +146 -0
- package/coverage/src/report/interactive-setup.ts.html +373 -0
- package/coverage/src/scoring.ts.html +895 -0
- package/coverage/src/semantic/co-usage.ts.html +340 -0
- package/coverage/src/semantic/consolidation.ts.html +223 -0
- package/coverage/src/semantic/domain-inference.ts.html +859 -0
- package/coverage/src/semantic/index.html +161 -0
- package/coverage/src/semantic/type-graph.ts.html +163 -0
- package/coverage/{summary.ts.html → src/summary.ts.html} +155 -275
- package/coverage/{types.ts.html → src/types.ts.html} +133 -31
- package/coverage/src/utils/dependency-graph-utils.ts.html +463 -0
- package/coverage/src/utils/index.html +131 -0
- package/coverage/src/utils/string-utils.ts.html +148 -0
- package/dist/chunk-J3MUOWHC.mjs +1747 -0
- package/dist/cli.js +59 -171
- package/dist/cli.mjs +1 -1
- package/dist/index.js +55 -167
- package/dist/index.mjs +1 -1
- package/package.json +2 -2
- package/src/__tests__/consolidation.test.ts +247 -0
- package/src/__tests__/defaults.test.ts +121 -0
- package/src/__tests__/domain-inference.test.ts +420 -0
- package/src/__tests__/issue-analyzer.test.ts +155 -0
- package/src/__tests__/orchestrator.test.ts +143 -0
- package/src/__tests__/python-context.test.ts +98 -0
- package/src/__tests__/report/console-report.test.ts +292 -0
- package/src/__tests__/report/html-report.test.ts +232 -0
- package/src/report/html-report.ts +58 -174
- package/coverage/analyzer.ts.html +0 -1369
- package/coverage/semantic-analysis.ts.html +0 -1201
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for src/classify</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../../index.html">All files</a> src/classify</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">96.42% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>108/112</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">75% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>84/112</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>33/33</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>105/105</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<div class="pad1">
|
|
66
|
+
<table class="coverage-summary">
|
|
67
|
+
<thead>
|
|
68
|
+
<tr>
|
|
69
|
+
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
|
70
|
+
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
|
71
|
+
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
|
72
|
+
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
73
|
+
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
|
74
|
+
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
75
|
+
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
|
76
|
+
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
77
|
+
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
|
78
|
+
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
79
|
+
</tr>
|
|
80
|
+
</thead>
|
|
81
|
+
<tbody><tr>
|
|
82
|
+
<td class="file high" data-value="classification-patterns.ts"><a href="classification-patterns.ts.html">classification-patterns.ts</a></td>
|
|
83
|
+
<td data-value="100" class="pic high">
|
|
84
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
|
|
85
|
+
</td>
|
|
86
|
+
<td data-value="100" class="pct high">100%</td>
|
|
87
|
+
<td data-value="9" class="abs high">9/9</td>
|
|
88
|
+
<td data-value="100" class="pct high">100%</td>
|
|
89
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
90
|
+
<td data-value="100" class="pct high">100%</td>
|
|
91
|
+
<td data-value="0" class="abs high">0/0</td>
|
|
92
|
+
<td data-value="100" class="pct high">100%</td>
|
|
93
|
+
<td data-value="9" class="abs high">9/9</td>
|
|
94
|
+
</tr>
|
|
95
|
+
|
|
96
|
+
<tr>
|
|
97
|
+
<td class="file high" data-value="file-classifiers.ts"><a href="file-classifiers.ts.html">file-classifiers.ts</a></td>
|
|
98
|
+
<td data-value="96.11" class="pic high">
|
|
99
|
+
<div class="chart"><div class="cover-fill" style="width: 96%"></div><div class="cover-empty" style="width: 4%"></div></div>
|
|
100
|
+
</td>
|
|
101
|
+
<td data-value="96.11" class="pct high">96.11%</td>
|
|
102
|
+
<td data-value="103" class="abs high">99/103</td>
|
|
103
|
+
<td data-value="75" class="pct medium">75%</td>
|
|
104
|
+
<td data-value="112" class="abs medium">84/112</td>
|
|
105
|
+
<td data-value="100" class="pct high">100%</td>
|
|
106
|
+
<td data-value="33" class="abs high">33/33</td>
|
|
107
|
+
<td data-value="100" class="pct high">100%</td>
|
|
108
|
+
<td data-value="96" class="abs high">96/96</td>
|
|
109
|
+
</tr>
|
|
110
|
+
|
|
111
|
+
</tbody>
|
|
112
|
+
</table>
|
|
113
|
+
</div>
|
|
114
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
115
|
+
</div><!-- /wrapper -->
|
|
116
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
117
|
+
Code coverage generated by
|
|
118
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
119
|
+
at 2026-03-21T12:52:37.698Z
|
|
120
|
+
</div>
|
|
121
|
+
<script src="../../prettify.js"></script>
|
|
122
|
+
<script>
|
|
123
|
+
window.onload = function () {
|
|
124
|
+
prettyPrint();
|
|
125
|
+
};
|
|
126
|
+
</script>
|
|
127
|
+
<script src="../../sorter.js"></script>
|
|
128
|
+
<script src="../../block-navigation.js"></script>
|
|
129
|
+
</body>
|
|
130
|
+
</html>
|
|
131
|
+
|
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
<html lang="en">
|
|
4
4
|
|
|
5
5
|
<head>
|
|
6
|
-
<title>Code coverage report for cluster-detector.ts</title>
|
|
6
|
+
<title>Code coverage report for src/cluster-detector.ts</title>
|
|
7
7
|
<meta charset="utf-8" />
|
|
8
|
-
<link rel="stylesheet" href="prettify.css" />
|
|
9
|
-
<link rel="stylesheet" href="base.css" />
|
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
|
|
8
|
+
<link rel="stylesheet" href="../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
11
11
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
12
|
<style type='text/css'>
|
|
13
13
|
.coverage-summary .sorter {
|
|
14
|
-
background-image: url(sort-arrow-sprite.png);
|
|
14
|
+
background-image: url(../sort-arrow-sprite.png);
|
|
15
15
|
}
|
|
16
16
|
</style>
|
|
17
17
|
</head>
|
|
@@ -19,34 +19,34 @@
|
|
|
19
19
|
<body>
|
|
20
20
|
<div class='wrapper'>
|
|
21
21
|
<div class='pad1'>
|
|
22
|
-
<h1><a href="index.html">All files</a> cluster-detector.ts</h1>
|
|
22
|
+
<h1><a href="../index.html">All files</a> / <a href="index.html">src</a> cluster-detector.ts</h1>
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">100% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>92/92</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
33
|
<span class="strong">77.27% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>34/44</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>12/12</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">100% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>71/71</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -163,7 +163,28 @@
|
|
|
163
163
|
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
164
|
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
165
|
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
-
<a name='L101'></a><a href='#L101'>101</a
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
167
188
|
<span class="cline-any cline-neutral"> </span>
|
|
168
189
|
<span class="cline-any cline-neutral"> </span>
|
|
169
190
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -173,41 +194,72 @@
|
|
|
173
194
|
<span class="cline-any cline-neutral"> </span>
|
|
174
195
|
<span class="cline-any cline-neutral"> </span>
|
|
175
196
|
<span class="cline-any cline-neutral"> </span>
|
|
176
|
-
<span class="cline-any cline-yes">
|
|
197
|
+
<span class="cline-any cline-yes">5x</span>
|
|
177
198
|
<span class="cline-any cline-neutral"> </span>
|
|
199
|
+
<span class="cline-any cline-yes">5x</span>
|
|
200
|
+
<span class="cline-any cline-yes">13x</span>
|
|
201
|
+
<span class="cline-any cline-yes">13x</span>
|
|
178
202
|
<span class="cline-any cline-yes">6x</span>
|
|
179
|
-
<span class="cline-any cline-yes">14x</span>
|
|
180
|
-
<span class="cline-any cline-yes">14x</span>
|
|
181
|
-
<span class="cline-any cline-yes">7x</span>
|
|
182
|
-
<span class="cline-any cline-neutral"> </span>
|
|
183
|
-
<span class="cline-any cline-yes">14x</span>
|
|
184
203
|
<span class="cline-any cline-neutral"> </span>
|
|
204
|
+
<span class="cline-any cline-yes">13x</span>
|
|
205
|
+
<span class="cline-any cline-yes">16x</span>
|
|
185
206
|
<span class="cline-any cline-neutral"> </span>
|
|
186
|
-
<span class="cline-any cline-yes">
|
|
187
|
-
<span class="cline-any cline-
|
|
188
|
-
<span class="cline-any cline-yes">
|
|
189
|
-
<span class="cline-any cline-yes">
|
|
207
|
+
<span class="cline-any cline-yes">16x</span>
|
|
208
|
+
<span class="cline-any cline-yes">19x</span>
|
|
209
|
+
<span class="cline-any cline-yes">24x</span>
|
|
210
|
+
<span class="cline-any cline-yes">25x</span>
|
|
190
211
|
<span class="cline-any cline-neutral"> </span>
|
|
191
|
-
<span class="cline-any cline-yes">
|
|
212
|
+
<span class="cline-any cline-yes">24x</span>
|
|
213
|
+
<span class="cline-any cline-yes">23x</span>
|
|
192
214
|
<span class="cline-any cline-yes">12x</span>
|
|
215
|
+
<span class="cline-any cline-yes">16x</span>
|
|
216
|
+
<span class="cline-any cline-neutral"> </span>
|
|
217
|
+
<span class="cline-any cline-yes">16x</span>
|
|
218
|
+
<span class="cline-any cline-yes">16x</span>
|
|
219
|
+
<span class="cline-any cline-yes">16x</span>
|
|
220
|
+
<span class="cline-any cline-yes">16x</span>
|
|
221
|
+
<span class="cline-any cline-yes">23x</span>
|
|
222
|
+
<span class="cline-any cline-yes">10x</span>
|
|
223
|
+
<span class="cline-any cline-yes">16x</span>
|
|
224
|
+
<span class="cline-any cline-yes">16x</span>
|
|
225
|
+
<span class="cline-any cline-yes">10x</span>
|
|
226
|
+
<span class="cline-any cline-yes">16x</span>
|
|
227
|
+
<span class="cline-any cline-yes">7x</span>
|
|
228
|
+
<span class="cline-any cline-yes">7x</span>
|
|
193
229
|
<span class="cline-any cline-yes">12x</span>
|
|
194
230
|
<span class="cline-any cline-neutral"> </span>
|
|
231
|
+
<span class="cline-any cline-yes">10x</span>
|
|
232
|
+
<span class="cline-any cline-yes">8x</span>
|
|
195
233
|
<span class="cline-any cline-neutral"> </span>
|
|
196
234
|
<span class="cline-any cline-neutral"> </span>
|
|
197
|
-
<span class="cline-any cline-yes">
|
|
198
|
-
<span class="cline-any cline-yes">5x</span>
|
|
199
|
-
<span class="cline-any cline-yes">5x</span>
|
|
200
|
-
<span class="cline-any cline-yes">12x</span>
|
|
235
|
+
<span class="cline-any cline-yes">16x</span>
|
|
201
236
|
<span class="cline-any cline-neutral"> </span>
|
|
202
|
-
<span class="cline-any cline-yes">
|
|
203
|
-
<span class="cline-any cline-
|
|
237
|
+
<span class="cline-any cline-yes">10x</span>
|
|
238
|
+
<span class="cline-any cline-neutral"> </span>
|
|
239
|
+
<span class="cline-any cline-neutral"> </span>
|
|
240
|
+
<span class="cline-any cline-yes">11x</span>
|
|
241
|
+
<span class="cline-any cline-yes">16x</span>
|
|
242
|
+
<span class="cline-any cline-yes">16x</span>
|
|
243
|
+
<span class="cline-any cline-yes">23x</span>
|
|
244
|
+
<span class="cline-any cline-yes">24x</span>
|
|
245
|
+
<span class="cline-any cline-yes">17x</span>
|
|
246
|
+
<span class="cline-any cline-yes">10x</span>
|
|
204
247
|
<span class="cline-any cline-neutral"> </span>
|
|
248
|
+
<span class="cline-any cline-yes">16x</span>
|
|
249
|
+
<span class="cline-any cline-yes">10x</span>
|
|
205
250
|
<span class="cline-any cline-yes">5x</span>
|
|
206
|
-
<span class="cline-any cline-yes">
|
|
207
|
-
<span class="cline-any cline-yes">
|
|
208
|
-
<span class="cline-any cline-
|
|
251
|
+
<span class="cline-any cline-yes">10x</span>
|
|
252
|
+
<span class="cline-any cline-yes">17x</span>
|
|
253
|
+
<span class="cline-any cline-neutral"> </span>
|
|
254
|
+
<span class="cline-any cline-yes">10x</span>
|
|
255
|
+
<span class="cline-any cline-yes">10x</span>
|
|
209
256
|
<span class="cline-any cline-neutral"> </span>
|
|
257
|
+
<span class="cline-any cline-yes">10x</span>
|
|
258
|
+
<span class="cline-any cline-yes">12x</span>
|
|
259
|
+
<span class="cline-any cline-yes">12x</span>
|
|
260
|
+
<span class="cline-any cline-yes">12x</span>
|
|
210
261
|
<span class="cline-any cline-neutral"> </span>
|
|
262
|
+
<span class="cline-any cline-yes">10x</span>
|
|
211
263
|
<span class="cline-any cline-yes">7x</span>
|
|
212
264
|
<span class="cline-any cline-neutral"> </span>
|
|
213
265
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -215,60 +267,58 @@
|
|
|
215
267
|
<span class="cline-any cline-neutral"> </span>
|
|
216
268
|
<span class="cline-any cline-neutral"> </span>
|
|
217
269
|
<span class="cline-any cline-neutral"> </span>
|
|
218
|
-
<span class="cline-any cline-
|
|
219
|
-
<span class="cline-any cline-
|
|
270
|
+
<span class="cline-any cline-yes">16x</span>
|
|
271
|
+
<span class="cline-any cline-yes">16x</span>
|
|
220
272
|
<span class="cline-any cline-yes">5x</span>
|
|
273
|
+
<span class="cline-any cline-yes">16x</span>
|
|
274
|
+
<span class="cline-any cline-yes">14x</span>
|
|
221
275
|
<span class="cline-any cline-yes">5x</span>
|
|
276
|
+
<span class="cline-any cline-yes">15x</span>
|
|
222
277
|
<span class="cline-any cline-yes">12x</span>
|
|
223
278
|
<span class="cline-any cline-yes">12x</span>
|
|
224
|
-
<span class="cline-any cline-
|
|
225
|
-
<span class="cline-any cline-yes">
|
|
226
|
-
<span class="cline-any cline-
|
|
227
|
-
<span class="cline-any cline-yes">
|
|
228
|
-
<span class="cline-any cline-neutral"> </span>
|
|
229
|
-
<span class="cline-any cline-neutral"> </span>
|
|
230
|
-
<span class="cline-any cline-neutral"> </span>
|
|
231
|
-
<span class="cline-any cline-neutral"> </span>
|
|
232
|
-
<span class="cline-any cline-neutral"> </span>
|
|
233
|
-
<span class="cline-any cline-neutral"> </span>
|
|
234
|
-
<span class="cline-any cline-neutral"> </span>
|
|
235
|
-
<span class="cline-any cline-neutral"> </span>
|
|
236
|
-
<span class="cline-any cline-neutral"> </span>
|
|
237
|
-
<span class="cline-any cline-neutral"> </span>
|
|
279
|
+
<span class="cline-any cline-yes">17x</span>
|
|
280
|
+
<span class="cline-any cline-yes">13x</span>
|
|
281
|
+
<span class="cline-any cline-yes">13x</span>
|
|
282
|
+
<span class="cline-any cline-yes">12x</span>
|
|
238
283
|
<span class="cline-any cline-neutral"> </span>
|
|
239
284
|
<span class="cline-any cline-neutral"> </span>
|
|
285
|
+
<span class="cline-any cline-yes">17x</span>
|
|
240
286
|
<span class="cline-any cline-neutral"> </span>
|
|
241
|
-
<span class="cline-any cline-yes">6x</span>
|
|
242
287
|
<span class="cline-any cline-neutral"> </span>
|
|
243
288
|
<span class="cline-any cline-neutral"> </span>
|
|
289
|
+
<span class="cline-any cline-yes">5x</span>
|
|
290
|
+
<span class="cline-any cline-yes">5x</span>
|
|
244
291
|
<span class="cline-any cline-neutral"> </span>
|
|
292
|
+
<span class="cline-any cline-yes">5x</span>
|
|
245
293
|
<span class="cline-any cline-neutral"> </span>
|
|
246
294
|
<span class="cline-any cline-neutral"> </span>
|
|
247
295
|
<span class="cline-any cline-neutral"> </span>
|
|
248
296
|
<span class="cline-any cline-neutral"> </span>
|
|
249
|
-
<span class="cline-any cline-yes">5x</span>
|
|
250
|
-
<span class="cline-any cline-yes">5x</span>
|
|
251
297
|
<span class="cline-any cline-neutral"> </span>
|
|
252
|
-
<span class="cline-any cline-yes">5x</span>
|
|
253
|
-
<span class="cline-any cline-yes">3x</span>
|
|
254
298
|
<span class="cline-any cline-neutral"> </span>
|
|
255
299
|
<span class="cline-any cline-neutral"> </span>
|
|
256
300
|
<span class="cline-any cline-neutral"> </span>
|
|
257
301
|
<span class="cline-any cline-neutral"> </span>
|
|
258
|
-
<span class="cline-any cline-yes">5x</span>
|
|
259
|
-
<span class="cline-any cline-yes">1x</span>
|
|
260
302
|
<span class="cline-any cline-neutral"> </span>
|
|
261
303
|
<span class="cline-any cline-neutral"> </span>
|
|
262
304
|
<span class="cline-any cline-neutral"> </span>
|
|
263
305
|
<span class="cline-any cline-neutral"> </span>
|
|
264
|
-
<span class="cline-any cline-yes">
|
|
306
|
+
<span class="cline-any cline-yes">11x</span>
|
|
265
307
|
<span class="cline-any cline-neutral"> </span>
|
|
266
308
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import type { DependencyGraph, ModuleCluster } from './types';
|
|
267
309
|
import { calculateFragmentation, calculateEnhancedCohesion } from './metrics';
|
|
310
|
+
import {
|
|
311
|
+
classifyFile,
|
|
312
|
+
adjustFragmentationForClassification,
|
|
313
|
+
} from './classifier';
|
|
268
314
|
|
|
269
315
|
/**
|
|
270
316
|
* Group files by domain to detect module clusters
|
|
271
|
-
|
|
317
|
+
* @param graph - The dependency graph to analyze
|
|
318
|
+
* @param options - Optional configuration options
|
|
319
|
+
* @param options.useLogScale - Whether to use logarithmic scaling for calculations
|
|
320
|
+
* @returns Array of module clusters
|
|
321
|
+
*/<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
272
322
|
export function detectModuleClusters(
|
|
273
323
|
graph: DependencyGraph,
|
|
274
324
|
options?: { useLogScale?: boolean }
|
|
@@ -282,14 +332,37 @@ export function detectModuleClusters(
|
|
|
282
332
|
}
|
|
283
333
|
domainMap.get(primaryDomain)!.push(file);
|
|
284
334
|
}
|
|
285
|
-
|
|
335
|
+
<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
286
336
|
const clusters: ModuleCluster[] = [];
|
|
337
|
+
|
|
338
|
+
const generateSuggestedStructure = (
|
|
339
|
+
files: string[],
|
|
340
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>tokens: number,
|
|
341
|
+
fragmentation: number
|
|
342
|
+
) => {<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
343
|
+
const targetFiles = Math.max(1, Math.ceil(tokens / 10000));
|
|
344
|
+
const plan: string[] = [];
|
|
345
|
+
|
|
346
|
+
if (fragmentation > 0.5) {
|
|
347
|
+
plan.push(
|
|
348
|
+
`Consolidate ${files.length} files scattered across multiple directories into ${targetFiles} core module(s)`
|
|
349
|
+
);
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
if (tokens > 20000) {
|
|
353
|
+
plan.push(
|
|
354
|
+
`Domain logic is very large (${Math.round(tokens / 1000)}k tokens). Ensure clear sub-domain boundaries.`
|
|
355
|
+
);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
return { targetFiles, consolidationPlan: plan };
|
|
359
|
+
};
|
|
287
360
|
|
|
288
361
|
for (const [domain, files] of domainMap.entries()) {
|
|
289
362
|
if (files.length < 2 || domain === 'unknown') continue;
|
|
290
363
|
|
|
291
364
|
const totalTokens = files.reduce((sum, file) => {
|
|
292
|
-
const node = graph.nodes.get(file);
|
|
365
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>const node = graph.nodes.get(file);
|
|
293
366
|
return sum + (node?.tokenCost || <span class="branch-1 cbranch-no" title="branch not covered" >0);</span>
|
|
294
367
|
}, 0);
|
|
295
368
|
|
|
@@ -300,7 +373,7 @@ export function detectModuleClusters(
|
|
|
300
373
|
(f) => new Set(graph.nodes.get(f)?.imports || <span class="branch-1 cbranch-no" title="branch not covered" >[])</span>
|
|
301
374
|
);
|
|
302
375
|
let intersection = new Set(allImportSets[0]);
|
|
303
|
-
|
|
376
|
+
const union = new Set(allImportSets[0]);
|
|
304
377
|
|
|
305
378
|
for (let i = 1; i < allImportSets.length; i++) {
|
|
306
379
|
const nextSet = allImportSets[i];
|
|
@@ -311,58 +384,48 @@ export function detectModuleClusters(
|
|
|
311
384
|
sharedImportRatio = union.size > 0 ? intersection.size / union.size : 0;
|
|
312
385
|
}
|
|
313
386
|
|
|
314
|
-
const
|
|
387
|
+
const rawFragmentation = calculateFragmentation(files, domain, {
|
|
315
388
|
...options,
|
|
316
389
|
sharedImportRatio,
|
|
317
390
|
});
|
|
318
391
|
|
|
319
|
-
// Average cohesion for the cluster
|
|
392
|
+
// Average cohesion and adjusted fragmentation for the cluster
|
|
320
393
|
let totalCohesion = 0;
|
|
394
|
+
let totalAdjustedFragmentation = 0;
|
|
395
|
+
|
|
321
396
|
files.forEach((f) => {
|
|
322
397
|
const node = graph.nodes.get(f);
|
|
323
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (node)
|
|
398
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (node) {
|
|
399
|
+
const cohesion = calculateEnhancedCohesion(node.exports);
|
|
400
|
+
totalCohesion += cohesion;
|
|
401
|
+
|
|
402
|
+
const classification = classifyFile(node, cohesion);
|
|
403
|
+
totalAdjustedFragmentation += adjustFragmentationForClassification(
|
|
404
|
+
rawFragmentation,
|
|
405
|
+
classification
|
|
406
|
+
);
|
|
407
|
+
}
|
|
324
408
|
});
|
|
409
|
+
|
|
325
410
|
const avgCohesion = totalCohesion / files.length;
|
|
411
|
+
const fragmentationScore = totalAdjustedFragmentation / files.length;
|
|
326
412
|
|
|
327
413
|
clusters.push({
|
|
328
414
|
domain,
|
|
329
415
|
files,
|
|
330
416
|
totalTokens,
|
|
331
|
-
fragmentationScore
|
|
417
|
+
fragmentationScore,
|
|
332
418
|
avgCohesion,
|
|
333
419
|
suggestedStructure: generateSuggestedStructure(
|
|
334
420
|
files,
|
|
335
421
|
totalTokens,
|
|
336
|
-
|
|
422
|
+
fragmentationScore
|
|
337
423
|
),
|
|
338
424
|
});
|
|
339
425
|
}
|
|
340
426
|
|
|
341
427
|
return clusters;
|
|
342
428
|
}
|
|
343
|
-
|
|
344
|
-
function generateSuggestedStructure(
|
|
345
|
-
files: string[],
|
|
346
|
-
tokens: number,
|
|
347
|
-
fragmentation: number
|
|
348
|
-
) {
|
|
349
|
-
const targetFiles = Math.max(1, Math.ceil(tokens / 10000));
|
|
350
|
-
const plan: string[] = [];
|
|
351
|
-
|
|
352
|
-
if (fragmentation > 0.5) {
|
|
353
|
-
plan.push(
|
|
354
|
-
`Consolidate ${files.length} files scattered across multiple directories into ${targetFiles} core module(s)`
|
|
355
|
-
);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
if (tokens > 20000) {
|
|
359
|
-
plan.push(
|
|
360
|
-
`Domain logic is very large (${Math.round(tokens / 1000)}k tokens). Ensure clear sub-domain boundaries.`
|
|
361
|
-
);
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
return { targetFiles, consolidationPlan: plan };
|
|
365
|
-
}
|
|
366
429
|
</pre></td></tr></table></pre>
|
|
367
430
|
|
|
368
431
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -370,16 +433,16 @@ function generateSuggestedStructure(
|
|
|
370
433
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
371
434
|
Code coverage generated by
|
|
372
435
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
373
|
-
at 2026-03-
|
|
436
|
+
at 2026-03-21T12:52:37.698Z
|
|
374
437
|
</div>
|
|
375
|
-
<script src="prettify.js"></script>
|
|
438
|
+
<script src="../prettify.js"></script>
|
|
376
439
|
<script>
|
|
377
440
|
window.onload = function () {
|
|
378
441
|
prettyPrint();
|
|
379
442
|
};
|
|
380
443
|
</script>
|
|
381
|
-
<script src="sorter.js"></script>
|
|
382
|
-
<script src="block-navigation.js"></script>
|
|
444
|
+
<script src="../sorter.js"></script>
|
|
445
|
+
<script src="../block-navigation.js"></script>
|
|
383
446
|
</body>
|
|
384
447
|
</html>
|
|
385
448
|
|