@aiready/context-analyzer 0.21.26 → 0.22.0
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 +16 -10
- package/.turbo/turbo-test.log +31 -69
- package/coverage/clover.xml +392 -1878
- package/coverage/coverage-final.json +15 -19
- package/coverage/index.html +48 -63
- package/coverage/src/analyzers/index.html +21 -21
- package/coverage/src/analyzers/python-context.ts.html +96 -96
- package/coverage/src/ast-utils.ts.html +34 -109
- package/coverage/src/classifier.ts.html +104 -104
- package/coverage/src/classify/classification-patterns.ts.html +1 -1
- package/coverage/src/classify/file-classifiers.ts.html +1 -1
- package/coverage/src/classify/index.html +1 -1
- package/coverage/src/cluster-detector.ts.html +72 -72
- package/coverage/src/defaults.ts.html +1 -1
- package/coverage/src/graph-builder.ts.html +131 -131
- package/coverage/src/index.html +101 -116
- package/coverage/src/index.ts.html +2 -2
- package/coverage/src/issue-analyzer.ts.html +32 -83
- package/coverage/src/mapper.ts.html +20 -2
- package/coverage/src/metrics.ts.html +127 -130
- package/coverage/src/orchestrator.ts.html +13 -13
- package/coverage/src/provider.ts.html +19 -19
- package/coverage/src/remediation.ts.html +59 -59
- package/coverage/src/report/console-report.ts.html +2 -2
- package/coverage/src/report/html-report.ts.html +60 -84
- package/coverage/src/report/index.html +7 -7
- package/coverage/src/report/interactive-setup.ts.html +1 -1
- package/coverage/src/scoring.ts.html +62 -62
- package/coverage/src/semantic/co-usage.ts.html +1 -1
- package/coverage/src/semantic/consolidation.ts.html +1 -1
- package/coverage/src/semantic/domain-inference.ts.html +1 -1
- package/coverage/src/semantic/index.html +1 -1
- package/coverage/src/semantic/type-graph.ts.html +1 -1
- package/coverage/src/summary.ts.html +67 -67
- package/coverage/src/types.ts.html +1 -1
- package/coverage/src/utils/dependency-graph-utils.ts.html +41 -41
- package/coverage/src/utils/index.html +21 -21
- package/coverage/src/utils/string-utils.ts.html +1 -1
- package/dist/chunk-22ZO4EKZ.mjs +1297 -0
- package/dist/chunk-4U4LDWGF.mjs +360 -0
- package/dist/chunk-BA7QGUHN.mjs +1722 -0
- package/dist/chunk-BCEZGRXI.mjs +1297 -0
- package/dist/chunk-BQCISA2F.mjs +91 -0
- package/dist/chunk-EMYD7NS6.mjs +137 -0
- package/dist/chunk-EWFR366Y.mjs +1740 -0
- package/dist/chunk-FO6YT6RG.mjs +1751 -0
- package/dist/chunk-J3SZQZNU.mjs +221 -0
- package/dist/chunk-OZE3FVZT.mjs +1089 -0
- package/dist/chunk-WHB7QI7N.mjs +91 -0
- package/dist/cli-action-CXIHOVAC.mjs +95 -0
- package/dist/cli-action-SA7SCYNV.mjs +95 -0
- package/dist/cli-action-YAJOJCXJ.mjs +95 -0
- package/dist/cli.js +688 -566
- package/dist/cli.mjs +4 -88
- package/dist/index.js +889 -773
- package/dist/index.mjs +21 -14
- package/dist/orchestrator-3L3NAZYP.mjs +10 -0
- package/dist/orchestrator-MONOZHVW.mjs +10 -0
- package/dist/orchestrator-ZR7JSKWI.mjs +10 -0
- package/dist/summary-7PZVW72O.mjs +7 -0
- package/dist/summary-LKUCJAIS.mjs +7 -0
- package/package.json +2 -2
- package/src/__tests__/analyzer.test.ts +1 -1
- package/src/__tests__/enhanced-cohesion.test.ts +4 -1
- package/src/__tests__/orchestrator.test.ts +19 -4
- package/src/__tests__/python-context.test.ts +6 -0
- package/src/__tests__/report/html-report.test.ts +8 -2
- package/src/ast-utils.ts +1 -26
- package/src/cli-definition.ts +4 -2
- package/src/issue-analyzer.ts +4 -19
- package/src/metrics.ts +1 -2
- package/src/provider.ts +4 -4
- package/src/report/html-report.ts +43 -59
- package/coverage/dist/chunk-64U3PNO3.mjs.html +0 -367
- package/coverage/dist/chunk-J3MUOWHC.mjs.html +0 -5326
- package/coverage/dist/index.html +0 -146
- package/coverage/dist/index.mjs.html +0 -1396
- package/coverage/src/analyzer.ts.html +0 -88
|
@@ -181,7 +181,19 @@
|
|
|
181
181
|
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
182
|
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
183
|
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
-
<a name='L119'></a><a href='#L119'>119</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>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
191
|
+
<span class="cline-any cline-neutral"> </span>
|
|
192
|
+
<span class="cline-any cline-neutral"> </span>
|
|
193
|
+
<span class="cline-any cline-neutral"> </span>
|
|
194
|
+
<span class="cline-any cline-neutral"> </span>
|
|
195
|
+
<span class="cline-any cline-neutral"> </span>
|
|
196
|
+
<span class="cline-any cline-neutral"> </span>
|
|
185
197
|
<span class="cline-any cline-neutral"> </span>
|
|
186
198
|
<span class="cline-any cline-neutral"> </span>
|
|
187
199
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -328,6 +340,12 @@ export interface MappingOptions {
|
|
|
328
340
|
|
|
329
341
|
/**
|
|
330
342
|
* Maps a single dependency node to a comprehensive ContextAnalysisResult.
|
|
343
|
+
*
|
|
344
|
+
* @param node - The dependency node to map
|
|
345
|
+
* @param graph - The full dependency graph
|
|
346
|
+
* @param clusters - All identified module clusters
|
|
347
|
+
* @param allCircularDeps - All identified circular dependencies
|
|
348
|
+
* @param options - Mapping options for detailed analysis
|
|
331
349
|
*/
|
|
332
350
|
export function mapNodeToResult(
|
|
333
351
|
node: DependencyNode,
|
|
@@ -424,7 +442,7 @@ export function mapNodeToResult(
|
|
|
424
442
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
425
443
|
Code coverage generated by
|
|
426
444
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
427
|
-
at 2026-03-
|
|
445
|
+
at 2026-03-24T11:20:59.666Z
|
|
428
446
|
</div>
|
|
429
447
|
<script src="../prettify.js"></script>
|
|
430
448
|
<script>
|
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">94.
|
|
26
|
+
<span class="strong">94.06% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>111/118</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">81.25% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>78/96</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'>11/11</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">97.89% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>93/95</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -306,8 +306,8 @@
|
|
|
306
306
|
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
307
|
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
308
|
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
-
<
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
310
|
+
<span class="cline-any cline-neutral"> </span>
|
|
311
311
|
<span class="cline-any cline-neutral"> </span>
|
|
312
312
|
<span class="cline-any cline-neutral"> </span>
|
|
313
313
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -326,81 +326,79 @@
|
|
|
326
326
|
<span class="cline-any cline-neutral"> </span>
|
|
327
327
|
<span class="cline-any cline-neutral"> </span>
|
|
328
328
|
<span class="cline-any cline-neutral"> </span>
|
|
329
|
-
<span class="cline-any cline-yes">16x</span>
|
|
330
329
|
<span class="cline-any cline-neutral"> </span>
|
|
331
330
|
<span class="cline-any cline-neutral"> </span>
|
|
332
|
-
<span class="cline-any cline-yes">4x</span>
|
|
333
331
|
<span class="cline-any cline-neutral"> </span>
|
|
334
332
|
<span class="cline-any cline-neutral"> </span>
|
|
335
|
-
<span class="cline-any cline-
|
|
336
|
-
<span class="cline-any cline-yes">
|
|
337
|
-
<span class="cline-any cline-
|
|
333
|
+
<span class="cline-any cline-neutral"> </span>
|
|
334
|
+
<span class="cline-any cline-yes">36x</span>
|
|
335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
338
336
|
<span class="cline-any cline-neutral"> </span>
|
|
339
337
|
<span class="cline-any cline-yes">13x</span>
|
|
340
|
-
<span class="cline-any cline-
|
|
341
|
-
<span class="cline-any cline-
|
|
342
|
-
<span class="cline-any cline-yes">
|
|
338
|
+
<span class="cline-any cline-neutral"> </span>
|
|
339
|
+
<span class="cline-any cline-neutral"> </span>
|
|
340
|
+
<span class="cline-any cline-yes">21x</span>
|
|
343
341
|
<span class="cline-any cline-yes">9x</span>
|
|
344
|
-
<span class="cline-any cline-yes">
|
|
345
|
-
<span class="cline-any cline-yes">
|
|
342
|
+
<span class="cline-any cline-yes">9x</span>
|
|
343
|
+
<span class="cline-any cline-yes">21x</span>
|
|
346
344
|
<span class="cline-any cline-neutral"> </span>
|
|
347
|
-
<span class="cline-any cline-yes">4x</span>
|
|
348
|
-
<span class="cline-any cline-yes">13x</span>
|
|
349
|
-
<span class="cline-any cline-yes">10x</span>
|
|
350
345
|
<span class="cline-any cline-neutral"> </span>
|
|
346
|
+
<span class="cline-any cline-yes">9x</span>
|
|
347
|
+
<span class="cline-any cline-yes">2x</span>
|
|
351
348
|
<span class="cline-any cline-neutral"> </span>
|
|
352
|
-
<span class="cline-any cline-yes">11x</span>
|
|
353
|
-
<span class="cline-any cline-yes">20x</span>
|
|
354
349
|
<span class="cline-any cline-neutral"> </span>
|
|
355
350
|
<span class="cline-any cline-yes">7x</span>
|
|
356
|
-
<span class="cline-any cline-yes">
|
|
357
|
-
<span class="cline-any cline-yes">20x</span>
|
|
358
|
-
<span class="cline-any cline-yes">11x</span>
|
|
351
|
+
<span class="cline-any cline-yes">16x</span>
|
|
359
352
|
<span class="cline-any cline-neutral"> </span>
|
|
353
|
+
<span class="cline-any cline-yes">7x</span>
|
|
354
|
+
<span class="cline-any cline-yes">7x</span>
|
|
355
|
+
<span class="cline-any cline-yes">16x</span>
|
|
356
|
+
<span class="cline-any cline-neutral"> </span>
|
|
357
|
+
<span class="cline-any cline-neutral"> </span>
|
|
358
|
+
<span class="cline-any cline-yes">7x</span>
|
|
359
|
+
<span class="cline-any cline-yes">7x</span>
|
|
360
|
+
<span class="cline-any cline-neutral"> </span>
|
|
361
|
+
<span class="cline-any cline-neutral"> </span>
|
|
362
|
+
<span class="cline-any cline-yes">7x</span>
|
|
363
|
+
<span class="cline-any cline-yes">7x</span>
|
|
364
|
+
<span class="cline-any cline-yes">7x</span>
|
|
365
|
+
<span class="cline-any cline-neutral"> </span>
|
|
366
|
+
<span class="cline-any cline-yes">7x</span>
|
|
367
|
+
<span class="cline-any cline-yes">16x</span>
|
|
360
368
|
<span class="cline-any cline-yes">11x</span>
|
|
361
|
-
<span class="cline-any cline-yes">15x</span>
|
|
362
|
-
<span class="cline-any cline-yes">4x</span>
|
|
363
|
-
<span class="cline-any cline-yes">4x</span>
|
|
364
|
-
<span class="cline-any cline-yes">15x</span>
|
|
365
369
|
<span class="cline-any cline-yes">11x</span>
|
|
370
|
+
<span class="cline-any cline-neutral"> </span>
|
|
366
371
|
<span class="cline-any cline-yes">11x</span>
|
|
367
372
|
<span class="cline-any cline-yes">4x</span>
|
|
368
|
-
<span class="cline-any cline-yes">11x</span>
|
|
369
|
-
<span class="cline-any cline-yes">20x</span>
|
|
370
|
-
<span class="cline-any cline-yes">15x</span>
|
|
371
|
-
<span class="cline-any cline-yes">20x</span>
|
|
372
|
-
<span class="cline-any cline-yes">20x</span>
|
|
373
|
-
<span class="cline-any cline-yes">11x</span>
|
|
374
|
-
<span class="cline-any cline-yes">12x</span>
|
|
375
373
|
<span class="cline-any cline-yes">4x</span>
|
|
376
374
|
<span class="cline-any cline-neutral"> </span>
|
|
377
375
|
<span class="cline-any cline-neutral"> </span>
|
|
378
|
-
<span class="cline-any cline-
|
|
376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
379
377
|
<span class="cline-any cline-yes">4x</span>
|
|
380
378
|
<span class="cline-any cline-yes">4x</span>
|
|
381
|
-
<span class="cline-any cline-yes">23x</span>
|
|
382
379
|
<span class="cline-any cline-neutral"> </span>
|
|
383
380
|
<span class="cline-any cline-neutral"> </span>
|
|
384
381
|
<span class="cline-any cline-neutral"> </span>
|
|
385
|
-
<span class="cline-any cline-
|
|
386
|
-
<span class="cline-any cline-
|
|
382
|
+
<span class="cline-any cline-neutral"> </span>
|
|
383
|
+
<span class="cline-any cline-neutral"> </span>
|
|
384
|
+
<span class="cline-any cline-yes">7x</span>
|
|
387
385
|
<span class="cline-any cline-neutral"> </span>
|
|
388
386
|
<span class="cline-any cline-neutral"> </span>
|
|
389
387
|
<span class="cline-any cline-yes">36x</span>
|
|
390
|
-
<span class="cline-any cline-yes">40x</span>
|
|
391
|
-
<span class="cline-any cline-yes">4x</span>
|
|
392
|
-
<span class="cline-any cline-yes">8x</span>
|
|
393
|
-
<span class="cline-any cline-yes">40x</span>
|
|
394
|
-
<span class="cline-any cline-yes">10x</span>
|
|
395
388
|
<span class="cline-any cline-neutral"> </span>
|
|
396
|
-
<span class="cline-any cline-
|
|
397
|
-
<span class="cline-any cline-
|
|
398
|
-
<span class="cline-any cline-yes">
|
|
389
|
+
<span class="cline-any cline-neutral"> </span>
|
|
390
|
+
<span class="cline-any cline-neutral"> </span>
|
|
391
|
+
<span class="cline-any cline-yes">36x</span>
|
|
392
|
+
<span class="cline-any cline-yes">2x</span>
|
|
393
|
+
<span class="cline-any cline-neutral"> </span>
|
|
394
|
+
<span class="cline-any cline-neutral"> </span>
|
|
395
|
+
<span class="cline-any cline-neutral"> </span>
|
|
396
|
+
<span class="cline-any cline-yes">7x</span>
|
|
399
397
|
<span class="cline-any cline-yes">7x</span>
|
|
400
398
|
<span class="cline-any cline-yes">16x</span>
|
|
401
|
-
<span class="cline-any cline-
|
|
399
|
+
<span class="cline-any cline-no"> </span>
|
|
400
|
+
<span class="cline-any cline-neutral"> </span>
|
|
402
401
|
<span class="cline-any cline-neutral"> </span>
|
|
403
|
-
<span class="cline-any cline-yes">11x</span>
|
|
404
402
|
<span class="cline-any cline-yes">7x</span>
|
|
405
403
|
<span class="cline-any cline-no"> </span>
|
|
406
404
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -410,6 +408,18 @@
|
|
|
410
408
|
<span class="cline-any cline-neutral"> </span>
|
|
411
409
|
<span class="cline-any cline-yes">7x</span>
|
|
412
410
|
<span class="cline-any cline-neutral"> </span>
|
|
411
|
+
<span class="cline-any cline-neutral"> </span>
|
|
412
|
+
<span class="cline-any cline-neutral"> </span>
|
|
413
|
+
<span class="cline-any cline-neutral"> </span>
|
|
414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
416
|
+
<span class="cline-any cline-neutral"> </span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-neutral"> </span>
|
|
422
|
+
<span class="cline-any cline-neutral"> </span>
|
|
413
423
|
<span class="cline-any cline-yes">4x</span>
|
|
414
424
|
<span class="cline-any cline-neutral"> </span>
|
|
415
425
|
<span class="cline-any cline-yes">3x</span>
|
|
@@ -422,18 +432,6 @@
|
|
|
422
432
|
<span class="cline-any cline-yes">3x</span>
|
|
423
433
|
<span class="cline-any cline-yes">3x</span>
|
|
424
434
|
<span class="cline-any cline-yes">5x</span>
|
|
425
|
-
<span class="cline-any cline-yes">7x</span>
|
|
426
|
-
<span class="cline-any cline-neutral"> </span>
|
|
427
|
-
<span class="cline-any cline-yes">6x</span>
|
|
428
|
-
<span class="cline-any cline-yes">3x</span>
|
|
429
|
-
<span class="cline-any cline-yes">2x</span>
|
|
430
|
-
<span class="cline-any cline-yes">5x</span>
|
|
431
|
-
<span class="cline-any cline-yes">9x</span>
|
|
432
|
-
<span class="cline-any cline-yes">5x</span>
|
|
433
|
-
<span class="cline-any cline-neutral"> </span>
|
|
434
|
-
<span class="cline-any cline-yes">3x</span>
|
|
435
|
-
<span class="cline-any cline-yes">5x</span>
|
|
436
|
-
<span class="cline-any cline-yes">5x</span>
|
|
437
435
|
<span class="cline-any cline-neutral"> </span>
|
|
438
436
|
<span class="cline-any cline-neutral"> </span>
|
|
439
437
|
<span class="cline-any cline-yes">3x</span>
|
|
@@ -448,14 +446,15 @@
|
|
|
448
446
|
<span class="cline-any cline-neutral"> </span>
|
|
449
447
|
<span class="cline-any cline-neutral"> </span>
|
|
450
448
|
<span class="cline-any cline-neutral"> </span>
|
|
451
|
-
<span class="cline-any cline-yes">14x</span>
|
|
452
449
|
<span class="cline-any cline-neutral"> </span>
|
|
453
|
-
<span class="cline-any cline-yes">11x</span>
|
|
454
|
-
<span class="cline-any cline-yes">33x</span>
|
|
455
450
|
<span class="cline-any cline-neutral"> </span>
|
|
456
|
-
<span class="cline-any cline-yes">11x</span>
|
|
457
451
|
<span class="cline-any cline-neutral"> </span>
|
|
458
|
-
<span class="cline-any cline-
|
|
452
|
+
<span class="cline-any cline-neutral"> </span>
|
|
453
|
+
<span class="cline-any cline-neutral"> </span>
|
|
454
|
+
<span class="cline-any cline-neutral"> </span>
|
|
455
|
+
<span class="cline-any cline-neutral"> </span>
|
|
456
|
+
<span class="cline-any cline-neutral"> </span>
|
|
457
|
+
<span class="cline-any cline-neutral"> </span>
|
|
459
458
|
<span class="cline-any cline-neutral"> </span>
|
|
460
459
|
<span class="cline-any cline-neutral"> </span>
|
|
461
460
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -465,68 +464,67 @@
|
|
|
465
464
|
<span class="cline-any cline-neutral"> </span>
|
|
466
465
|
<span class="cline-any cline-neutral"> </span>
|
|
467
466
|
<span class="cline-any cline-yes">14x</span>
|
|
468
|
-
<span class="cline-any cline-
|
|
469
|
-
<span class="cline-any cline-yes">2x</span>
|
|
467
|
+
<span class="cline-any cline-neutral"> </span>
|
|
470
468
|
<span class="cline-any cline-yes">11x</span>
|
|
471
469
|
<span class="cline-any cline-yes">33x</span>
|
|
472
|
-
<span class="cline-any cline-
|
|
470
|
+
<span class="cline-any cline-neutral"> </span>
|
|
473
471
|
<span class="cline-any cline-yes">11x</span>
|
|
474
472
|
<span class="cline-any cline-neutral"> </span>
|
|
475
473
|
<span class="cline-any cline-yes">11x</span>
|
|
476
474
|
<span class="cline-any cline-neutral"> </span>
|
|
477
475
|
<span class="cline-any cline-neutral"> </span>
|
|
478
476
|
<span class="cline-any cline-neutral"> </span>
|
|
479
|
-
<span class="cline-any cline-yes">13x</span>
|
|
480
477
|
<span class="cline-any cline-neutral"> </span>
|
|
481
|
-
<span class="cline-any cline-
|
|
482
|
-
<span class="cline-any cline-
|
|
483
|
-
<span class="cline-any cline-
|
|
484
|
-
<span class="cline-any cline-
|
|
485
|
-
<span class="cline-any cline-yes">
|
|
478
|
+
<span class="cline-any cline-neutral"> </span>
|
|
479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
480
|
+
<span class="cline-any cline-neutral"> </span>
|
|
481
|
+
<span class="cline-any cline-neutral"> </span>
|
|
482
|
+
<span class="cline-any cline-yes">14x</span>
|
|
486
483
|
<span class="cline-any cline-yes">2x</span>
|
|
487
|
-
<span class="cline-any cline-yes">16x</span>
|
|
488
484
|
<span class="cline-any cline-yes">2x</span>
|
|
485
|
+
<span class="cline-any cline-neutral"> </span>
|
|
486
|
+
<span class="cline-any cline-neutral"> </span>
|
|
489
487
|
<span class="cline-any cline-yes">11x</span>
|
|
490
|
-
<span class="cline-any cline-yes">7x</span>
|
|
491
|
-
<span class="cline-any cline-yes">2x</span>
|
|
492
|
-
<span class="cline-any cline-yes">2x</span>
|
|
493
|
-
<span class="cline-any cline-yes">7x</span>
|
|
494
|
-
<span class="cline-any cline-yes">7x</span>
|
|
495
488
|
<span class="cline-any cline-neutral"> </span>
|
|
496
489
|
<span class="cline-any cline-neutral"> </span>
|
|
497
|
-
<span class="cline-any cline-
|
|
498
|
-
<span class="cline-any cline-
|
|
490
|
+
<span class="cline-any cline-neutral"> </span>
|
|
491
|
+
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-neutral"> </span>
|
|
493
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-neutral"> </span>
|
|
495
|
+
<span class="cline-any cline-neutral"> </span>
|
|
496
|
+
<span class="cline-any cline-neutral"> </span>
|
|
499
497
|
<span class="cline-any cline-yes">3x</span>
|
|
500
498
|
<span class="cline-any cline-neutral"> </span>
|
|
501
499
|
<span class="cline-any cline-yes">3x</span>
|
|
502
500
|
<span class="cline-any cline-yes">3x</span>
|
|
503
501
|
<span class="cline-any cline-yes">16x</span>
|
|
504
502
|
<span class="cline-any cline-yes">16x</span>
|
|
505
|
-
<span class="cline-any cline-yes">5x</span>
|
|
506
503
|
<span class="cline-any cline-neutral"> </span>
|
|
507
|
-
<span class="cline-any cline-
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
508
505
|
<span class="cline-any cline-yes">3x</span>
|
|
509
|
-
<span class="cline-any cline-yes">
|
|
510
|
-
<span class="cline-any cline-
|
|
511
|
-
<span class="cline-any cline-yes">12x</span>
|
|
512
|
-
<span class="cline-any cline-yes">8x</span>
|
|
513
|
-
<span class="cline-any cline-yes">7x</span>
|
|
506
|
+
<span class="cline-any cline-yes">3x</span>
|
|
507
|
+
<span class="cline-any cline-neutral"> </span>
|
|
514
508
|
<span class="cline-any cline-yes">7x</span>
|
|
515
|
-
<span class="cline-any cline-yes">4x</span>
|
|
516
509
|
<span class="cline-any cline-yes">2x</span>
|
|
517
510
|
<span class="cline-any cline-yes">2x</span>
|
|
518
|
-
<span class="cline-any cline-yes">
|
|
519
|
-
<span class="cline-any cline-yes">
|
|
520
|
-
<span class="cline-any cline-yes">6x</span>
|
|
521
|
-
<span class="cline-any cline-yes">6x</span>
|
|
522
|
-
<span class="cline-any cline-yes">6x</span>
|
|
523
|
-
<span class="cline-any cline-yes">6x</span>
|
|
524
|
-
<span class="cline-any cline-yes">6x</span>
|
|
525
|
-
<span class="cline-any cline-yes">6x</span>
|
|
511
|
+
<span class="cline-any cline-yes">7x</span>
|
|
512
|
+
<span class="cline-any cline-yes">7x</span>
|
|
526
513
|
<span class="cline-any cline-neutral"> </span>
|
|
527
514
|
<span class="cline-any cline-neutral"> </span>
|
|
528
515
|
<span class="cline-any cline-yes">2x</span>
|
|
529
516
|
<span class="cline-any cline-yes">2x</span>
|
|
517
|
+
<span class="cline-any cline-neutral"> </span>
|
|
518
|
+
<span class="cline-any cline-neutral"> </span>
|
|
519
|
+
<span class="cline-any cline-neutral"> </span>
|
|
520
|
+
<span class="cline-any cline-neutral"> </span>
|
|
521
|
+
<span class="cline-any cline-neutral"> </span>
|
|
522
|
+
<span class="cline-any cline-neutral"> </span>
|
|
523
|
+
<span class="cline-any cline-neutral"> </span>
|
|
524
|
+
<span class="cline-any cline-neutral"> </span>
|
|
525
|
+
<span class="cline-any cline-neutral"> </span>
|
|
526
|
+
<span class="cline-any cline-yes">2x</span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
530
528
|
<span class="cline-any cline-yes">12x</span>
|
|
531
529
|
<span class="cline-any cline-yes">2x</span>
|
|
532
530
|
<span class="cline-any cline-yes">6x</span>
|
|
@@ -551,9 +549,8 @@
|
|
|
551
549
|
<span class="cline-any cline-neutral"> </span>
|
|
552
550
|
<span class="cline-any cline-yes">2x</span>
|
|
553
551
|
<span class="cline-any cline-neutral"> </span>
|
|
554
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { calculateImportSimilarity } from '@aiready/core';
|
|
552
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { calculateImportSimilarity, isTestFile } from '@aiready/core';
|
|
555
553
|
import type { ExportInfo } from './types';
|
|
556
|
-
import { isTestFile } from './ast-utils';
|
|
557
554
|
|
|
558
555
|
/**
|
|
559
556
|
* Calculates a cohesion score (0-1) for a module based on its exports,
|
|
@@ -573,17 +570,17 @@ export function calculateEnhancedCohesion(
|
|
|
573
570
|
weights?: {
|
|
574
571
|
importBased?: number;
|
|
575
572
|
structural?: number;
|
|
576
|
-
|
|
573
|
+
domainBased?: number;
|
|
577
574
|
};
|
|
578
575
|
}
|
|
579
|
-
): number {
|
|
576
|
+
): number {
|
|
580
577
|
if (exports.length <= 1) return 1;
|
|
581
578
|
|
|
582
579
|
// Test files always have perfect cohesion by design
|
|
583
580
|
if (filePath && isTestFile(filePath)) return 1;
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
const domains = exports.map((e) => e.inferredDomain || 'unknown')
|
|
581
|
+
|
|
582
|
+
// 1. Domain-based cohesion using entropy
|
|
583
|
+
const domains = exports.map((e) => e.inferredDomain || <span class="branch-1 cbranch-no" title="branch not covered" >'unknown')</span>;
|
|
587
584
|
const domainCounts = new Map<string, number>();
|
|
588
585
|
for (const domain of domains)
|
|
589
586
|
domainCounts.set(domain, (domainCounts.get(domain) || 0) + 1);
|
|
@@ -606,10 +603,10 @@ export function calculateEnhancedCohesion(
|
|
|
606
603
|
|
|
607
604
|
// 2. Import-based cohesion
|
|
608
605
|
let importScoreTotal = 0;
|
|
609
|
-
let
|
|
606
|
+
let pairsWithData = 0;
|
|
610
607
|
let anyImportData = false;
|
|
611
608
|
|
|
612
|
-
for (let i = 0; i < exports.length; i++) {
|
|
609
|
+
for (let i = 0; i < exports.length; i++) {
|
|
613
610
|
for (let j = i + 1; j < exports.length; j++) {
|
|
614
611
|
const exp1Imports = exports[i].imports;
|
|
615
612
|
const exp2Imports = exports[j].imports;
|
|
@@ -624,7 +621,7 @@ export function calculateEnhancedCohesion(
|
|
|
624
621
|
pairsWithData++;
|
|
625
622
|
}
|
|
626
623
|
}
|
|
627
|
-
}
|
|
624
|
+
}
|
|
628
625
|
|
|
629
626
|
const avgImportScore =
|
|
630
627
|
pairsWithData > 0 ? importScoreTotal / pairsWithData : 0;
|
|
@@ -633,16 +630,16 @@ export function calculateEnhancedCohesion(
|
|
|
633
630
|
let score = anyImportData
|
|
634
631
|
? domainScore * 0.4 + avgImportScore * 0.6
|
|
635
632
|
: domainScore;
|
|
636
|
-
|
|
633
|
+
|
|
637
634
|
if (anyImportData && score === 0 && domainScore === 0) {
|
|
638
635
|
score = 0.1;
|
|
639
636
|
}
|
|
640
|
-
|
|
641
|
-
|
|
637
|
+
|
|
638
|
+
// Structural boost
|
|
642
639
|
let structuralScore = 0;
|
|
643
640
|
for (const exp of exports) {
|
|
644
641
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (exp.dependencies && <span class="branch-1 cbranch-no" title="branch not covered" >exp.dependencies.length > 0) {</span>
|
|
645
|
-
|
|
642
|
+
<span class="cstat-no" title="statement not covered" > structuralScore += 1;</span>
|
|
646
643
|
}
|
|
647
644
|
}
|
|
648
645
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (structuralScore > 0) {
|
|
@@ -657,15 +654,15 @@ export function calculateEnhancedCohesion(
|
|
|
657
654
|
|
|
658
655
|
/**
|
|
659
656
|
* Calculate structural cohesion for a file based on co-usage patterns.
|
|
660
|
-
|
|
657
|
+
*
|
|
661
658
|
* @param file - The file path to analyze.
|
|
662
659
|
* @param coUsageMatrix - Matrix of files frequently imported together.
|
|
663
660
|
* @returns Cohesion score between 0 and 1 based on co-usage distribution.
|
|
664
|
-
|
|
661
|
+
*/
|
|
665
662
|
export function calculateStructuralCohesionFromCoUsage(
|
|
666
663
|
file: string,
|
|
667
664
|
coUsageMatrix?: Map<string, Map<string, number>>
|
|
668
|
-
):
|
|
665
|
+
): number {
|
|
669
666
|
if (!coUsageMatrix) return 1;
|
|
670
667
|
|
|
671
668
|
const coUsages = coUsageMatrix.get(file);
|
|
@@ -673,10 +670,10 @@ export function calculateStructuralCohesionFromCoUsage(
|
|
|
673
670
|
|
|
674
671
|
let total = 0;
|
|
675
672
|
for (const count of coUsages.values()) total += count;
|
|
676
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (total === 0) return 1
|
|
673
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (total === 0) <span class="cstat-no" title="statement not covered" >return 1;</span>
|
|
677
674
|
|
|
678
675
|
const probs: number[] = [];
|
|
679
|
-
for (const count of coUsages.values()) {
|
|
676
|
+
for (const count of coUsages.values()) {
|
|
680
677
|
<span class="missing-if-branch" title="else path not taken" >E</span>if (count > 0) probs.push(count / total);
|
|
681
678
|
}
|
|
682
679
|
|
|
@@ -701,7 +698,7 @@ export function calculateStructuralCohesionFromCoUsage(
|
|
|
701
698
|
*/
|
|
702
699
|
export function calculateFragmentation(
|
|
703
700
|
files: string[],
|
|
704
|
-
domain
|
|
701
|
+
domain: string,
|
|
705
702
|
options?: {
|
|
706
703
|
useLogScale?: boolean;
|
|
707
704
|
logBase?: number;
|
|
@@ -720,16 +717,16 @@ export function calculateFragmentation(
|
|
|
720
717
|
? uniqueDirs <= 1
|
|
721
718
|
? <span class="branch-0 cbranch-no" title="branch not covered" >0</span>
|
|
722
719
|
: Math.log(uniqueDirs) /
|
|
723
|
-
|
|
720
|
+
Math.log(options.logBase || Math.E) /
|
|
724
721
|
(Math.log(files.length) / Math.log(options.logBase || Math.E))
|
|
725
722
|
: (uniqueDirs - 1) / (files.length - 1);
|
|
726
723
|
|
|
727
|
-
// Coupling Discount
|
|
724
|
+
// Coupling Discount
|
|
728
725
|
if (options?.sharedImportRatio && options.sharedImportRatio > 0.5) {
|
|
729
726
|
const discount = (options.sharedImportRatio - 0.5) * 0.4;
|
|
730
727
|
score = score * (1 - discount);
|
|
731
728
|
}
|
|
732
|
-
|
|
729
|
+
|
|
733
730
|
return score;
|
|
734
731
|
}
|
|
735
732
|
|
|
@@ -739,14 +736,14 @@ export function calculateFragmentation(
|
|
|
739
736
|
* @param files - Array of file paths.
|
|
740
737
|
* @returns Entropy score representing the spread across directories.
|
|
741
738
|
*/
|
|
742
|
-
export function calculatePathEntropy(files:
|
|
739
|
+
export function calculatePathEntropy(files: string[]): number {
|
|
743
740
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (!files || files.length === 0) <span class="cstat-no" title="statement not covered" >return 0;</span>
|
|
744
741
|
|
|
745
742
|
const dirCounts = new Map<string, number>();
|
|
746
743
|
for (const file of files) {
|
|
747
744
|
const dir = file.split('/').slice(0, -1).join('/') || '.';
|
|
748
745
|
dirCounts.set(dir, (dirCounts.get(dir) || 0) + 1);
|
|
749
|
-
|
|
746
|
+
}
|
|
750
747
|
|
|
751
748
|
const counts = Array.from(dirCounts.values());
|
|
752
749
|
if (counts.length <= 1) return 0;
|
|
@@ -765,12 +762,12 @@ export function calculatePathEntropy(files: strin<span class="branch-1 cbranch-n
|
|
|
765
762
|
/**
|
|
766
763
|
* Calculate directory-distance metric based on common ancestor depth.
|
|
767
764
|
*
|
|
768
|
-
* @param files - Array of file paths to compare
|
|
765
|
+
* @param files - Array of file paths to compare.
|
|
769
766
|
* @returns Normalized distance metric (0-1).
|
|
770
767
|
*/
|
|
771
768
|
export function calculateDirectoryDistance(files: string[]): number {
|
|
772
769
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (!files || files.length <= 1) <span class="cstat-no" title="statement not covered" >return 0;</span>
|
|
773
|
-
|
|
770
|
+
|
|
774
771
|
const pathSegments = (pathStr: string) => pathStr.split('/').filter(Boolean);
|
|
775
772
|
const commonAncestorDepth = (pathA: string[], pathB: string[]) => {
|
|
776
773
|
const minLen = Math.min(pathA.length, pathB.length);
|
|
@@ -802,7 +799,7 @@ export function calculateDirectoryDistance(files: string[]): number {
|
|
|
802
799
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
803
800
|
Code coverage generated by
|
|
804
801
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
805
|
-
at 2026-03-
|
|
802
|
+
at 2026-03-24T11:20:59.666Z
|
|
806
803
|
</div>
|
|
807
804
|
<script src="../prettify.js"></script>
|
|
808
805
|
<script>
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>22/22</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
@@ -37,16 +37,16 @@
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>8/8</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>21/21</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -283,7 +283,7 @@
|
|
|
283
283
|
<span class="cline-any cline-neutral"> </span>
|
|
284
284
|
<span class="cline-any cline-neutral"> </span>
|
|
285
285
|
<span class="cline-any cline-yes">1x</span>
|
|
286
|
-
<span class="cline-any cline-
|
|
286
|
+
<span class="cline-any cline-yes">1x</span>
|
|
287
287
|
<span class="cline-any cline-neutral"> </span>
|
|
288
288
|
<span class="cline-any cline-neutral"> </span>
|
|
289
289
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -297,7 +297,7 @@
|
|
|
297
297
|
<span class="cline-any cline-neutral"> </span>
|
|
298
298
|
<span class="cline-any cline-neutral"> </span>
|
|
299
299
|
<span class="cline-any cline-neutral"> </span>
|
|
300
|
-
<span class="cline-any cline-
|
|
300
|
+
<span class="cline-any cline-yes">1x</span>
|
|
301
301
|
<span class="cline-any cline-neutral"> </span>
|
|
302
302
|
<span class="cline-any cline-neutral"> </span>
|
|
303
303
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -406,7 +406,7 @@ export async function analyzeContext(
|
|
|
406
406
|
}))
|
|
407
407
|
);
|
|
408
408
|
|
|
409
|
-
const graph = buildDependencyGraph(
|
|
409
|
+
const graph = await buildDependencyGraph(
|
|
410
410
|
fileContents.filter((f) => !f.file.toLowerCase().endsWith('.py'))
|
|
411
411
|
);
|
|
412
412
|
|
|
@@ -418,8 +418,8 @@ export async function analyzeContext(
|
|
|
418
418
|
scanOptions.rootDir || <span class="branch-1 cbranch-no" title="branch not covered" >options.rootDir || <span class="branch-2 cbranch-no" title="branch not covered" >'</span>.'</span>
|
|
419
419
|
);
|
|
420
420
|
|
|
421
|
-
pythonResults = pythonMetrics.map(
|
|
422
|
-
const { severity, issues, recommendations, potentialSavings
|
|
421
|
+
pythonResults = pythonMetrics.map((metric) => {
|
|
422
|
+
const { severity, issues, recommendations, potentialSavings } =
|
|
423
423
|
analyzeIssues({
|
|
424
424
|
file: metric.file,
|
|
425
425
|
importDepth: metric.importDepth,
|
|
@@ -433,7 +433,7 @@ export async function analyzeContext(
|
|
|
433
433
|
circularDeps: [],
|
|
434
434
|
});
|
|
435
435
|
|
|
436
|
-
|
|
436
|
+
return {
|
|
437
437
|
file: metric.file,
|
|
438
438
|
tokenCost: 0,
|
|
439
439
|
linesOfCode: 0,
|
|
@@ -478,7 +478,7 @@ export async function analyzeContext(
|
|
|
478
478
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
479
479
|
Code coverage generated by
|
|
480
480
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
481
|
-
at 2026-03-
|
|
481
|
+
at 2026-03-24T11:20:59.666Z
|
|
482
482
|
</div>
|
|
483
483
|
<script src="../prettify.js"></script>
|
|
484
484
|
<script>
|