@aiready/consistency 0.20.14 → 0.20.19
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 +24 -23
- package/.turbo/turbo-lint.log +5 -24
- package/.turbo/turbo-test.log +31 -27
- package/coverage/clover.xml +562 -565
- package/coverage/coverage-final.json +12 -12
- package/coverage/index.html +36 -36
- package/coverage/src/analyzer.ts.html +263 -368
- package/coverage/src/analyzers/index.html +55 -55
- package/coverage/src/analyzers/naming-ast.ts.html +305 -164
- package/coverage/src/analyzers/naming-constants.ts.html +42 -36
- package/coverage/src/analyzers/naming-generalized.ts.html +312 -33
- package/coverage/src/analyzers/naming.ts.html +58 -52
- package/coverage/src/analyzers/patterns.ts.html +43 -52
- package/coverage/src/index.html +22 -22
- package/coverage/src/index.ts.html +1 -1
- package/coverage/src/provider.ts.html +22 -49
- package/coverage/src/scoring.ts.html +39 -45
- package/coverage/src/utils/ast-parser.ts.html +33 -33
- package/coverage/src/utils/config-loader.ts.html +1 -1
- package/coverage/src/utils/context-detector.ts.html +92 -92
- package/coverage/src/utils/index.html +14 -14
- package/coverage/src/utils/scope-tracker.ts.html +52 -52
- package/package.json +2 -2
- package/src/__tests__/naming.test.ts +88 -0
- package/src/__tests__/scope-tracker.test.ts +184 -0
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">89.26% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>133/149</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">65.87% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>83/126</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">96.15% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>25/26</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">88.33% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>106/120</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -324,42 +324,7 @@
|
|
|
324
324
|
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
325
|
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
326
|
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
-
<a name='L297'></a><a href='#L297'>297</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
363
328
|
<span class="cline-any cline-neutral"> </span>
|
|
364
329
|
<span class="cline-any cline-neutral"> </span>
|
|
365
330
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -388,278 +353,243 @@
|
|
|
388
353
|
<span class="cline-any cline-yes">45x</span>
|
|
389
354
|
<span class="cline-any cline-yes">45x</span>
|
|
390
355
|
<span class="cline-any cline-neutral"> </span>
|
|
391
|
-
<span class="cline-any cline-
|
|
356
|
+
<span class="cline-any cline-neutral"> </span>
|
|
357
|
+
<span class="cline-any cline-yes">3x</span>
|
|
392
358
|
<span class="cline-any cline-yes">3x</span>
|
|
393
359
|
<span class="cline-any cline-yes">3x</span>
|
|
394
360
|
<span class="cline-any cline-yes">7x</span>
|
|
395
361
|
<span class="cline-any cline-yes">3x</span>
|
|
362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
363
|
+
<span class="cline-any cline-yes">4x</span>
|
|
396
364
|
<span class="cline-any cline-yes">3x</span>
|
|
397
|
-
<span class="cline-any cline-yes">7x</span>
|
|
398
365
|
<span class="cline-any cline-neutral"> </span>
|
|
366
|
+
<span class="cline-any cline-yes">4x</span>
|
|
367
|
+
<span class="cline-any cline-yes">3x</span>
|
|
399
368
|
<span class="cline-any cline-yes">3x</span>
|
|
400
369
|
<span class="cline-any cline-yes">4x</span>
|
|
401
370
|
<span class="cline-any cline-yes">4x</span>
|
|
402
|
-
<span class="cline-any cline-yes">
|
|
403
|
-
<span class="cline-any cline-yes">
|
|
404
|
-
<span class="cline-any cline-
|
|
371
|
+
<span class="cline-any cline-yes">3x</span>
|
|
372
|
+
<span class="cline-any cline-yes">37x</span>
|
|
373
|
+
<span class="cline-any cline-yes">15x</span>
|
|
405
374
|
<span class="cline-any cline-neutral"> </span>
|
|
406
375
|
<span class="cline-any cline-yes">49x</span>
|
|
407
|
-
<span class="cline-any cline-yes">
|
|
408
|
-
<span class="cline-any cline-yes">
|
|
376
|
+
<span class="cline-any cline-yes">22x</span>
|
|
377
|
+
<span class="cline-any cline-yes">26x</span>
|
|
409
378
|
<span class="cline-any cline-neutral"> </span>
|
|
410
|
-
<span class="cline-any cline-yes">
|
|
411
|
-
<span class="cline-any cline-yes">16x</span>
|
|
379
|
+
<span class="cline-any cline-yes">26x</span>
|
|
412
380
|
<span class="cline-any cline-neutral"> </span>
|
|
413
381
|
<span class="cline-any cline-neutral"> </span>
|
|
414
|
-
<span class="cline-any cline-yes">20x</span>
|
|
415
382
|
<span class="cline-any cline-neutral"> </span>
|
|
383
|
+
<span class="cline-any cline-yes">26x</span>
|
|
416
384
|
<span class="cline-any cline-neutral"> </span>
|
|
417
|
-
<span class="cline-any cline-yes">20x</span>
|
|
418
|
-
<span class="cline-any cline-yes">20x</span>
|
|
419
385
|
<span class="cline-any cline-neutral"> </span>
|
|
386
|
+
<span class="cline-any cline-yes">26x</span>
|
|
387
|
+
<span class="cline-any cline-yes">26x</span>
|
|
420
388
|
<span class="cline-any cline-neutral"> </span>
|
|
421
|
-
<span class="cline-any cline-yes">
|
|
422
|
-
<span class="cline-any cline-yes">54x</span>
|
|
423
|
-
<span class="cline-any cline-yes">6x</span>
|
|
424
|
-
<span class="cline-any cline-yes">28x</span>
|
|
389
|
+
<span class="cline-any cline-yes">33x</span>
|
|
425
390
|
<span class="cline-any cline-yes">16x</span>
|
|
426
|
-
<span class="cline-any cline-yes">
|
|
427
|
-
<span class="cline-any cline-yes">
|
|
428
|
-
<span class="cline-any cline-neutral"> </span>
|
|
391
|
+
<span class="cline-any cline-yes">42x</span>
|
|
392
|
+
<span class="cline-any cline-yes">26x</span>
|
|
429
393
|
<span class="cline-any cline-neutral"> </span>
|
|
394
|
+
<span class="cline-any cline-yes">6x</span>
|
|
430
395
|
<span class="cline-any cline-neutral"> </span>
|
|
431
396
|
<span class="cline-any cline-yes">3x</span>
|
|
432
|
-
<span class="cline-any cline-yes">
|
|
433
|
-
<span class="cline-any cline-yes">
|
|
434
|
-
<span class="cline-any cline-
|
|
397
|
+
<span class="cline-any cline-yes">4x</span>
|
|
398
|
+
<span class="cline-any cline-yes">9x</span>
|
|
399
|
+
<span class="cline-any cline-yes">6x</span>
|
|
435
400
|
<span class="cline-any cline-neutral"> </span>
|
|
436
401
|
<span class="cline-any cline-no"> </span>
|
|
437
402
|
<span class="cline-any cline-neutral"> </span>
|
|
403
|
+
<span class="cline-any cline-yes">7x</span>
|
|
404
|
+
<span class="cline-any cline-yes">4x</span>
|
|
438
405
|
<span class="cline-any cline-neutral"> </span>
|
|
439
406
|
<span class="cline-any cline-neutral"> </span>
|
|
407
|
+
<span class="cline-any cline-yes">3x</span>
|
|
440
408
|
<span class="cline-any cline-neutral"> </span>
|
|
441
409
|
<span class="cline-any cline-neutral"> </span>
|
|
442
|
-
<span class="cline-any cline-yes">51x</span>
|
|
443
|
-
<span class="cline-any cline-yes">17x</span>
|
|
444
|
-
<span class="cline-any cline-neutral"> </span>
|
|
445
|
-
<span class="cline-any cline-yes">48x</span>
|
|
446
410
|
<span class="cline-any cline-neutral"> </span>
|
|
447
411
|
<span class="cline-any cline-neutral"> </span>
|
|
448
412
|
<span class="cline-any cline-neutral"> </span>
|
|
449
|
-
<span class="cline-any cline-yes">4x</span>
|
|
450
413
|
<span class="cline-any cline-yes">7x</span>
|
|
414
|
+
<span class="cline-any cline-yes">6x</span>
|
|
451
415
|
<span class="cline-any cline-yes">4x</span>
|
|
416
|
+
<span class="cline-any cline-no"> </span>
|
|
417
|
+
<span class="cline-any cline-no"> </span>
|
|
452
418
|
<span class="cline-any cline-yes">4x</span>
|
|
419
|
+
<span class="cline-any cline-yes">6x</span>
|
|
420
|
+
<span class="cline-any cline-yes">6x</span>
|
|
421
|
+
<span class="cline-any cline-yes">9x</span>
|
|
453
422
|
<span class="cline-any cline-neutral"> </span>
|
|
454
|
-
<span class="cline-any cline-yes">4x</span>
|
|
455
|
-
<span class="cline-any cline-yes">3x</span>
|
|
456
423
|
<span class="cline-any cline-neutral"> </span>
|
|
457
424
|
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-yes">3x</span>
|
|
426
|
+
<span class="cline-any cline-yes">12x</span>
|
|
458
427
|
<span class="cline-any cline-neutral"> </span>
|
|
459
428
|
<span class="cline-any cline-neutral"> </span>
|
|
460
|
-
<span class="cline-any cline-yes">7x</span>
|
|
461
429
|
<span class="cline-any cline-yes">16x</span>
|
|
430
|
+
<span class="cline-any cline-yes">16x</span>
|
|
431
|
+
<span class="cline-any cline-yes">15x</span>
|
|
462
432
|
<span class="cline-any cline-neutral"> </span>
|
|
433
|
+
<span class="cline-any cline-yes">4x</span>
|
|
434
|
+
<span class="cline-any cline-yes">2x</span>
|
|
463
435
|
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-yes">9x</span>
|
|
437
|
+
<span class="cline-any cline-yes">20x</span>
|
|
464
438
|
<span class="cline-any cline-neutral"> </span>
|
|
465
439
|
<span class="cline-any cline-neutral"> </span>
|
|
440
|
+
<span class="cline-any cline-yes">20x</span>
|
|
441
|
+
<span class="cline-any cline-yes">30x</span>
|
|
442
|
+
<span class="cline-any cline-yes">4x</span>
|
|
443
|
+
<span class="cline-any cline-yes">24x</span>
|
|
444
|
+
<span class="cline-any cline-yes">48x</span>
|
|
445
|
+
<span class="cline-any cline-neutral"> </span>
|
|
446
|
+
<span class="cline-any cline-yes">9x</span>
|
|
447
|
+
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-yes">24x</span>
|
|
449
|
+
<span class="cline-any cline-yes">10x</span>
|
|
466
450
|
<span class="cline-any cline-neutral"> </span>
|
|
467
451
|
<span class="cline-any cline-neutral"> </span>
|
|
468
|
-
<span class="cline-any cline-yes">7x</span>
|
|
469
|
-
<span class="cline-any cline-yes">4x</span>
|
|
470
|
-
<span class="cline-any cline-yes">2x</span>
|
|
471
|
-
<span class="cline-any cline-yes">3x</span>
|
|
472
|
-
<span class="cline-any cline-yes">21x</span>
|
|
473
|
-
<span class="cline-any cline-yes">6x</span>
|
|
474
452
|
<span class="cline-any cline-neutral"> </span>
|
|
475
|
-
<span class="cline-any cline-yes">18x</span>
|
|
476
453
|
<span class="cline-any cline-yes">18x</span>
|
|
477
454
|
<span class="cline-any cline-neutral"> </span>
|
|
478
|
-
<span class="cline-any cline-yes">22x</span>
|
|
479
|
-
<span class="cline-any cline-yes">57x</span>
|
|
480
455
|
<span class="cline-any cline-neutral"> </span>
|
|
481
456
|
<span class="cline-any cline-neutral"> </span>
|
|
457
|
+
<span class="cline-any cline-yes">3x</span>
|
|
482
458
|
<span class="cline-any cline-neutral"> </span>
|
|
483
|
-
<span class="cline-any cline-yes">37x</span>
|
|
484
|
-
<span class="cline-any cline-yes">25x</span>
|
|
485
459
|
<span class="cline-any cline-neutral"> </span>
|
|
460
|
+
<span class="cline-any cline-yes">33x</span>
|
|
461
|
+
<span class="cline-any cline-yes">3x</span>
|
|
486
462
|
<span class="cline-any cline-neutral"> </span>
|
|
487
463
|
<span class="cline-any cline-neutral"> </span>
|
|
488
|
-
<span class="cline-any cline-yes">12x</span>
|
|
489
|
-
<span class="cline-any cline-yes">4x</span>
|
|
490
464
|
<span class="cline-any cline-neutral"> </span>
|
|
491
|
-
<span class="cline-any cline-yes">30x</span>
|
|
492
|
-
<span class="cline-any cline-yes">33x</span>
|
|
493
|
-
<span class="cline-any cline-yes">69x</span>
|
|
494
465
|
<span class="cline-any cline-neutral"> </span>
|
|
495
|
-
<span class="cline-any cline-yes">
|
|
496
|
-
<span class="cline-any cline-yes">33x</span>
|
|
466
|
+
<span class="cline-any cline-yes">3x</span>
|
|
497
467
|
<span class="cline-any cline-neutral"> </span>
|
|
498
|
-
<span class="cline-any cline-yes">30x</span>
|
|
499
468
|
<span class="cline-any cline-neutral"> </span>
|
|
500
|
-
<span class="cline-any cline-yes">76x</span>
|
|
501
|
-
<span class="cline-any cline-yes">79x</span>
|
|
502
469
|
<span class="cline-any cline-neutral"> </span>
|
|
470
|
+
<span class="cline-any cline-yes">16x</span>
|
|
503
471
|
<span class="cline-any cline-neutral"> </span>
|
|
504
472
|
<span class="cline-any cline-neutral"> </span>
|
|
505
473
|
<span class="cline-any cline-neutral"> </span>
|
|
506
|
-
<span class="cline-any cline-yes">33x</span>
|
|
507
|
-
<span class="cline-any cline-yes">8x</span>
|
|
508
474
|
<span class="cline-any cline-neutral"> </span>
|
|
509
475
|
<span class="cline-any cline-neutral"> </span>
|
|
510
476
|
<span class="cline-any cline-neutral"> </span>
|
|
511
|
-
<span class="cline-any cline-yes">28x</span>
|
|
512
477
|
<span class="cline-any cline-neutral"> </span>
|
|
513
478
|
<span class="cline-any cline-neutral"> </span>
|
|
514
479
|
<span class="cline-any cline-neutral"> </span>
|
|
515
|
-
<span class="cline-any cline-yes">
|
|
480
|
+
<span class="cline-any cline-yes">9x</span>
|
|
516
481
|
<span class="cline-any cline-neutral"> </span>
|
|
517
482
|
<span class="cline-any cline-neutral"> </span>
|
|
518
|
-
<span class="cline-any cline-yes">
|
|
519
|
-
<span class="cline-any cline-yes">
|
|
483
|
+
<span class="cline-any cline-yes">66x</span>
|
|
484
|
+
<span class="cline-any cline-yes">75x</span>
|
|
520
485
|
<span class="cline-any cline-neutral"> </span>
|
|
521
|
-
<span class="cline-any cline-yes">4x</span>
|
|
522
|
-
<span class="cline-any cline-yes">4x</span>
|
|
523
486
|
<span class="cline-any cline-neutral"> </span>
|
|
524
|
-
<span class="cline-any cline-yes">12x</span>
|
|
525
|
-
<span class="cline-any cline-yes">20x</span>
|
|
526
487
|
<span class="cline-any cline-neutral"> </span>
|
|
527
|
-
<span class="cline-any cline-yes">16x</span>
|
|
528
488
|
<span class="cline-any cline-neutral"> </span>
|
|
489
|
+
<span class="cline-any cline-yes">21x</span>
|
|
490
|
+
<span class="cline-any cline-yes">31x</span>
|
|
529
491
|
<span class="cline-any cline-neutral"> </span>
|
|
492
|
+
<span class="cline-any cline-yes">21x</span>
|
|
530
493
|
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-yes">9x</span>
|
|
531
495
|
<span class="cline-any cline-neutral"> </span>
|
|
532
496
|
<span class="cline-any cline-neutral"> </span>
|
|
533
497
|
<span class="cline-any cline-neutral"> </span>
|
|
534
|
-
<span class="cline-any cline-yes">10x</span>
|
|
535
498
|
<span class="cline-any cline-neutral"> </span>
|
|
536
499
|
<span class="cline-any cline-yes">3x</span>
|
|
537
|
-
<span class="cline-any cline-
|
|
500
|
+
<span class="cline-any cline-neutral"> </span>
|
|
501
|
+
<span class="cline-any cline-yes">3x</span>
|
|
502
|
+
<span class="cline-any cline-yes">33x</span>
|
|
538
503
|
<span class="cline-any cline-yes">3x</span>
|
|
539
504
|
<span class="cline-any cline-no"> </span>
|
|
505
|
+
<span class="cline-any cline-yes">12x</span>
|
|
506
|
+
<span class="cline-any cline-yes">3x</span>
|
|
540
507
|
<span class="cline-any cline-neutral"> </span>
|
|
541
508
|
<span class="cline-any cline-neutral"> </span>
|
|
542
|
-
<span class="cline-any cline-
|
|
543
|
-
<span class="cline-any cline-
|
|
544
|
-
<span class="cline-any cline-yes">
|
|
545
|
-
<span class="cline-any cline-yes">470x</span>
|
|
546
|
-
<span class="cline-any cline-yes">133x</span>
|
|
547
|
-
<span class="cline-any cline-yes">72x</span>
|
|
548
|
-
<span class="cline-any cline-no"> </span>
|
|
509
|
+
<span class="cline-any cline-yes">33x</span>
|
|
510
|
+
<span class="cline-any cline-yes">3x</span>
|
|
511
|
+
<span class="cline-any cline-yes">9x</span>
|
|
549
512
|
<span class="cline-any cline-neutral"> </span>
|
|
550
513
|
<span class="cline-any cline-neutral"> </span>
|
|
551
514
|
<span class="cline-any cline-neutral"> </span>
|
|
552
|
-
<span class="cline-any cline-yes">54x</span>
|
|
553
|
-
<span class="cline-any cline-yes">54x</span>
|
|
554
|
-
<span class="cline-any cline-yes">51x</span>
|
|
555
|
-
<span class="cline-any cline-yes">51x</span>
|
|
556
515
|
<span class="cline-any cline-neutral"> </span>
|
|
557
|
-
<span class="cline-any cline-yes">
|
|
516
|
+
<span class="cline-any cline-yes">9x</span>
|
|
517
|
+
<span class="cline-any cline-yes">12x</span>
|
|
518
|
+
<span class="cline-any cline-yes">12x</span>
|
|
519
|
+
<span class="cline-any cline-yes">12x</span>
|
|
520
|
+
<span class="cline-any cline-yes">9x</span>
|
|
558
521
|
<span class="cline-any cline-neutral"> </span>
|
|
559
|
-
<span class="cline-any cline-yes">10x</span>
|
|
560
|
-
<span class="cline-any cline-yes">51x</span>
|
|
561
|
-
<span class="cline-any cline-no"> </span>
|
|
562
|
-
<span class="cline-any cline-yes">51x</span>
|
|
563
|
-
<span class="cline-any cline-no"> </span>
|
|
564
522
|
<span class="cline-any cline-neutral"> </span>
|
|
565
523
|
<span class="cline-any cline-neutral"> </span>
|
|
566
524
|
<span class="cline-any cline-neutral"> </span>
|
|
567
|
-
<span class="cline-any cline-
|
|
568
|
-
<span class="cline-any cline-
|
|
569
|
-
<span class="cline-any cline-
|
|
525
|
+
<span class="cline-any cline-yes">9x</span>
|
|
526
|
+
<span class="cline-any cline-yes">9x</span>
|
|
527
|
+
<span class="cline-any cline-yes">9x</span>
|
|
570
528
|
<span class="cline-any cline-neutral"> </span>
|
|
571
|
-
<span class="cline-any cline-yes">110x</span>
|
|
572
529
|
<span class="cline-any cline-neutral"> </span>
|
|
573
530
|
<span class="cline-any cline-neutral"> </span>
|
|
574
531
|
<span class="cline-any cline-neutral"> </span>
|
|
575
|
-
<span class="cline-any cline-yes">
|
|
576
|
-
<span class="cline-any cline-yes">22x</span>
|
|
577
|
-
<span class="cline-any cline-yes">54x</span>
|
|
578
|
-
<span class="cline-any cline-yes">51x</span>
|
|
579
|
-
<span class="cline-any cline-yes">54x</span>
|
|
532
|
+
<span class="cline-any cline-yes">9x</span>
|
|
580
533
|
<span class="cline-any cline-no"> </span>
|
|
581
534
|
<span class="cline-any cline-no"> </span>
|
|
582
535
|
<span class="cline-any cline-neutral"> </span>
|
|
583
|
-
<span class="cline-any cline-yes">44x</span>
|
|
584
|
-
<span class="cline-any cline-yes">44x</span>
|
|
585
536
|
<span class="cline-any cline-neutral"> </span>
|
|
586
|
-
<span class="cline-any cline-yes">7x</span>
|
|
587
|
-
<span class="cline-any cline-yes">7x</span>
|
|
588
|
-
<span class="cline-any cline-neutral"> </span>
|
|
589
|
-
<span class="cline-any cline-no"> </span>
|
|
590
537
|
<span class="cline-any cline-no"> </span>
|
|
591
|
-
<span class="cline-any cline-
|
|
538
|
+
<span class="cline-any cline-yes">3x</span>
|
|
592
539
|
<span class="cline-any cline-no"> </span>
|
|
540
|
+
<span class="cline-any cline-yes">3x</span>
|
|
541
|
+
<span class="cline-any cline-yes">3x</span>
|
|
593
542
|
<span class="cline-any cline-neutral"> </span>
|
|
594
543
|
<span class="cline-any cline-neutral"> </span>
|
|
595
|
-
<span class="cline-any cline-
|
|
596
|
-
<span class="cline-any cline-yes">19x</span>
|
|
597
|
-
<span class="cline-any cline-neutral"> </span>
|
|
598
|
-
<span class="cline-any cline-neutral"> </span>
|
|
599
|
-
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-yes">3x</span>
|
|
600
545
|
<span class="cline-any cline-neutral"> </span>
|
|
601
546
|
<span class="cline-any cline-neutral"> </span>
|
|
602
547
|
<span class="cline-any cline-neutral"> </span>
|
|
603
|
-
<span class="cline-any cline-yes">4x</span>
|
|
604
548
|
<span class="cline-any cline-neutral"> </span>
|
|
605
|
-
<span class="cline-any cline-yes">4x</span>
|
|
606
|
-
<span class="cline-any cline-yes">3x</span>
|
|
607
|
-
<span class="cline-any cline-yes">51x</span>
|
|
608
549
|
<span class="cline-any cline-neutral"> </span>
|
|
609
|
-
<span class="cline-any cline-yes">3x</span>
|
|
610
|
-
<span class="cline-any cline-yes">3x</span>
|
|
611
550
|
<span class="cline-any cline-neutral"> </span>
|
|
612
551
|
<span class="cline-any cline-neutral"> </span>
|
|
613
552
|
<span class="cline-any cline-neutral"> </span>
|
|
614
553
|
<span class="cline-any cline-neutral"> </span>
|
|
615
|
-
<span class="cline-any cline-yes">3x</span>
|
|
616
|
-
<span class="cline-any cline-yes">51x</span>
|
|
617
554
|
<span class="cline-any cline-neutral"> </span>
|
|
618
|
-
<span class="cline-any cline-
|
|
619
|
-
<span class="cline-any cline-yes">3x</span>
|
|
555
|
+
<span class="cline-any cline-no"> </span>
|
|
620
556
|
<span class="cline-any cline-neutral"> </span>
|
|
621
557
|
<span class="cline-any cline-neutral"> </span>
|
|
622
558
|
<span class="cline-any cline-neutral"> </span>
|
|
623
559
|
<span class="cline-any cline-neutral"> </span>
|
|
624
560
|
<span class="cline-any cline-neutral"> </span>
|
|
625
|
-
<span class="cline-any cline-yes">4x</span>
|
|
626
|
-
<span class="cline-any cline-yes">2x</span>
|
|
627
|
-
<span class="cline-any cline-yes">4x</span>
|
|
628
561
|
<span class="cline-any cline-neutral"> </span>
|
|
629
|
-
<span class="cline-any cline-yes">2x</span>
|
|
630
|
-
<span class="cline-any cline-yes">2x</span>
|
|
631
562
|
<span class="cline-any cline-neutral"> </span>
|
|
632
563
|
<span class="cline-any cline-neutral"> </span>
|
|
633
564
|
<span class="cline-any cline-neutral"> </span>
|
|
565
|
+
<span class="cline-any cline-yes">6x</span>
|
|
566
|
+
<span class="cline-any cline-yes">6x</span>
|
|
567
|
+
<span class="cline-any cline-yes">9x</span>
|
|
568
|
+
<span class="cline-any cline-yes">9x</span>
|
|
634
569
|
<span class="cline-any cline-neutral"> </span>
|
|
635
|
-
<span class="cline-any cline-
|
|
636
|
-
<span class="cline-any cline-yes">2x</span>
|
|
570
|
+
<span class="cline-any cline-no"> </span>
|
|
637
571
|
<span class="cline-any cline-no"> </span>
|
|
638
572
|
<span class="cline-any cline-neutral"> </span>
|
|
639
|
-
<span class="cline-any cline-neutral"> </span>
|
|
640
|
-
<span class="cline-any cline-neutral"> </span>
|
|
641
|
-
<span class="cline-any cline-neutral"> </span>
|
|
642
|
-
<span class="cline-any cline-yes">4x</span>
|
|
643
573
|
<span class="cline-any cline-yes">2x</span>
|
|
644
574
|
<span class="cline-any cline-yes">2x</span>
|
|
645
575
|
<span class="cline-any cline-neutral"> </span>
|
|
576
|
+
<span class="cline-any cline-yes">7x</span>
|
|
577
|
+
<span class="cline-any cline-yes">7x</span>
|
|
646
578
|
<span class="cline-any cline-neutral"> </span>
|
|
579
|
+
<span class="cline-any cline-no"> </span>
|
|
580
|
+
<span class="cline-any cline-no"> </span>
|
|
647
581
|
<span class="cline-any cline-neutral"> </span>
|
|
648
|
-
<span class="cline-any cline-
|
|
649
|
-
<span class="cline-any cline-neutral"> </span>
|
|
650
|
-
<span class="cline-any cline-yes">4x</span>
|
|
651
|
-
<span class="cline-any cline-yes">1x</span>
|
|
652
|
-
<span class="cline-any cline-neutral"> </span>
|
|
582
|
+
<span class="cline-any cline-no"> </span>
|
|
653
583
|
<span class="cline-any cline-neutral"> </span>
|
|
654
584
|
<span class="cline-any cline-neutral"> </span>
|
|
655
585
|
<span class="cline-any cline-neutral"> </span>
|
|
656
|
-
<span class="cline-any cline-yes">
|
|
586
|
+
<span class="cline-any cline-yes">6x</span>
|
|
657
587
|
<span class="cline-any cline-neutral"> </span>
|
|
658
588
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import {
|
|
659
589
|
scanFiles,
|
|
660
590
|
Severity,
|
|
661
591
|
IssueType,
|
|
662
|
-
|
|
592
|
+
getSeverityLevel,
|
|
663
593
|
} from '@aiready/core';
|
|
664
594
|
import type { AnalysisResult, Issue } from '@aiready/core';
|
|
665
595
|
import type {
|
|
@@ -672,8 +602,12 @@ import { analyzeNamingGeneralized } from './analyzers/naming-generalized';
|
|
|
672
602
|
import { analyzePatterns } from './analyzers/patterns';
|
|
673
603
|
|
|
674
604
|
/**
|
|
675
|
-
* Main consistency analyzer that orchestrates all analysis types
|
|
676
|
-
* Supports: TypeScript, JavaScript, Python, Java, C#, Go
|
|
605
|
+
* Main consistency analyzer that orchestrates all analysis types.
|
|
606
|
+
* Supports: TypeScript, JavaScript, Python, Java, C#, Go.
|
|
607
|
+
*
|
|
608
|
+
* @param options - Configuration for consistency analysis and file scanning.
|
|
609
|
+
* @returns Promise resolving to the comprehensive consistency report.
|
|
610
|
+
* @lastUpdated 2026-03-18
|
|
677
611
|
*/
|
|
678
612
|
export async function analyzeConsistency(
|
|
679
613
|
options: ConsistencyOptions
|
|
@@ -682,13 +616,13 @@ export async function analyzeConsistency(
|
|
|
682
616
|
checkNaming = true,
|
|
683
617
|
checkPatterns = true,
|
|
684
618
|
checkArchitecture = false, // Not implemented yet
|
|
685
|
-
|
|
686
|
-
...scanOptions
|
|
687
|
-
} = options
|
|
619
|
+
<span class="missing-if-branch" title="else path not taken" >E</span> minSeverity = Severity.Info,
|
|
620
|
+
...scanOptions<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
621
|
+
} = options;<span class="branch-0 cbranch-no" title="branch not covered" ></span>
|
|
622
|
+
|
|
623
|
+
// Mark intentionally-unused option to avoid lint warnings
|
|
624
|
+
void checkArchitecture;
|
|
688
625
|
|
|
689
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>// Mark intentionally-unused option to avoid lint warnings
|
|
690
|
-
void checkArchitecture;<span class="branch-1 cbranch-no" title="branch not covered" ></span>
|
|
691
|
-
<span class="branch-0 cbranch-no" title="branch not covered" ></span>
|
|
692
626
|
// Scan files
|
|
693
627
|
const filePaths = await scanFiles(scanOptions);
|
|
694
628
|
|
|
@@ -715,160 +649,181 @@ export async function analyzeConsistency(
|
|
|
715
649
|
|
|
716
650
|
// Process naming issues
|
|
717
651
|
for (const issue of namingIssues) {
|
|
718
|
-
if (!shouldIncludeSeverity(issue.severity, minSeverity))
|
|
719
|
-
continue;
|
|
720
|
-
}
|
|
652
|
+
if (!shouldIncludeSeverity(issue.severity, minSeverity)) continue;
|
|
721
653
|
|
|
722
|
-
const
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
message: `${issue.type}: ${issue.identifier}`,
|
|
730
|
-
location: {
|
|
731
|
-
file: issue.file,
|
|
732
|
-
line: issue.line,<span class="cstat-no" title="statement not covered" ></span>
|
|
733
|
-
column: issue.column,
|
|
734
|
-
},
|
|
735
|
-
suggestion: issue.suggestion,
|
|
736
|
-
};
|
|
737
|
-
|
|
738
|
-
if (!fileIssuesMap.has(issue.file)) {
|
|
739
|
-
fileIssuesMap.set(issue.file, []);
|
|
740
|
-
}
|
|
741
|
-
fileIssuesMap.get(issue.file)!.push(consistencyIssue);
|
|
654
|
+
const fileName =
|
|
655
|
+
(issue as any).fileName ||
|
|
656
|
+
(issue as any).file ||
|
|
657
|
+
(<span class="branch-2 cbranch-no" title="branch not covered" >issue as any).filePath ||</span>
|
|
658
|
+
<span class="branch-3 cbranch-no" title="branch not covered" > 'unknown';</span>
|
|
659
|
+
if (!fileIssuesMap.has(fileName)) fileIssuesMap.set(fileName, []);
|
|
660
|
+
fileIssuesMap.get(fileName)!.push(issue as unknown as ConsistencyIssue);
|
|
742
661
|
}
|
|
743
|
-
|
|
662
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
744
663
|
// Process pattern issues
|
|
745
664
|
for (const issue of patternIssues) {
|
|
746
|
-
if (!shouldIncludeSeverity(issue.severity, minSeverity))
|
|
747
|
-
continue;
|
|
748
|
-
}
|
|
749
|
-
|
|
750
|
-
const consistencyIssue: ConsistencyIssue = {
|
|
751
|
-
type: IssueType.PatternInconsistency,
|
|
752
|
-
category: 'patterns',
|
|
753
|
-
severity: getSeverityEnum(issue.severity),
|
|
754
|
-
message: issue.description,
|
|
755
|
-
location: {
|
|
756
|
-
file: issue.files[0] || <span class="branch-1 cbranch-no" title="branch not covered" >'multiple files',</span>
|
|
757
|
-
line: 1,
|
|
758
|
-
},
|
|
759
|
-
examples: issue.examples,
|
|
760
|
-
suggestion: `Standardize ${issue.type} patterns across ${issue.files.length} files`,
|
|
761
|
-
};
|
|
665
|
+
if (!shouldIncludeSeverity(issue.severity, minSeverity)) continue;
|
|
762
666
|
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
667
|
+
const fileName =
|
|
668
|
+
(issue as any).fileName ||
|
|
669
|
+
(issue as any).file ||
|
|
670
|
+
(issue as any).filePath ||
|
|
671
|
+
(Array.isArray((issue as any).files)
|
|
672
|
+
? (issue as any).files[0]
|
|
673
|
+
: <span class="branch-1 cbranch-no" title="branch not covered" >'unknown');</span>
|
|
674
|
+
if (!fileIssuesMap.has(fileName)) fileIssuesMap.set(fileName, []);
|
|
675
|
+
fileIssuesMap.get(fileName)!.push(issue as unknown as ConsistencyIssue);
|
|
771
676
|
}
|
|
772
|
-
|
|
773
|
-
//
|
|
774
|
-
for (const [fileName, issues] of fileIssuesMap) {
|
|
677
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
678
|
+
// B<span class="cstat-no" title="statement not covered" >uild final results</span>
|
|
679
|
+
for (const [fileName, issues] of fileIssuesMap.entries()) {
|
|
775
680
|
results.push({
|
|
776
681
|
fileName,
|
|
777
|
-
issues: issues
|
|
682
|
+
issues: issues.map((i) => transformToIssue(i)),
|
|
778
683
|
metrics: {
|
|
779
684
|
consistencyScore: calculateConsistencyScore(issues),
|
|
780
685
|
},
|
|
781
686
|
});
|
|
782
687
|
}
|
|
783
688
|
|
|
784
|
-
//
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
...fileResultB.issues.map((i) => {
|
|
796
|
-
const val = getSeverityLevel((i as ConsistencyIssue).severity);
|
|
797
|
-
return val === 4 ? <span class="branch-0 cbranch-no" title="branch not covered" >0 : v</span>al === 3 ? 1 : val === 2 ? 2 : <span class="branch-1 cbranch-no" title="branch not covered" >3;</span>
|
|
798
|
-
})
|
|
689
|
+
// Generate high-level recommendations
|
|
690
|
+
const recommendations: string[] = [];
|
|
691
|
+
if (namingIssues.length > 0) {
|
|
692
|
+
recommendations.push('Standardize naming conventions across the codebase');
|
|
693
|
+
}
|
|
694
|
+
if (patternIssues.length > 0) {
|
|
695
|
+
recommendations.push('Consolidate repetitive implementation patterns');
|
|
696
|
+
}
|
|
697
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (results.some((r) => (r.metrics?.consistencyScore ?? <span class="branch-1 cbranch-no" title="branch not covered" >1) < 0</span>.8)) {
|
|
698
|
+
recommendations.push(
|
|
699
|
+
'Improve cross-module consistency to reduce AI confusion'
|
|
799
700
|
);
|
|
800
|
-
|
|
801
|
-
// Sort by severity first
|
|
802
|
-
if (maxSeverityA !== maxSeverityB) {
|
|
803
|
-
return maxSeverityA - maxSeverityB;
|
|
804
|
-
}
|
|
805
|
-
|
|
806
|
-
// Then by issue count (descending)
|
|
807
|
-
return fileResultB.issues.length - fileResultA.issues.length;
|
|
808
|
-
});
|
|
809
|
-
|
|
810
|
-
// Generate recommendations
|
|
811
|
-
const recommendations = generateRecommendations(namingIssues, patternIssues);
|
|
812
|
-
|
|
813
|
-
// Compute filtered counts (respecting minSeverity) to report accurate summary
|
|
814
|
-
const namingCountFiltered = namingIssues.filter((i) =>
|
|
815
|
-
shouldIncludeSeverity(i.severity, minSeverity)
|
|
816
|
-
).length;
|
|
817
|
-
const patternCountFiltered = patternIssues.filter((i) =>
|
|
818
|
-
shouldIncludeSeverity(i.severity, minSeverity)
|
|
819
|
-
).length;
|
|
701
|
+
}
|
|
820
702
|
|
|
821
703
|
return {
|
|
704
|
+
results,
|
|
822
705
|
summary: {
|
|
823
|
-
totalIssues: namingCountFiltered + patternCountFiltered,
|
|
824
|
-
namingIssues: namingCountFiltered,
|
|
825
|
-
patternIssues: patternCountFiltered,
|
|
826
|
-
architectureIssues: 0,
|
|
827
706
|
filesAnalyzed: filePaths.length,
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
<span class="missing-if-branch" title="else path not taken" >E</span> ),
|
|
707
|
+
totalIssues: results.reduce((acc, r) => acc + r.issues.length, 0),
|
|
708
|
+
namingIssues: namingIssues.length,
|
|
709
|
+
patternIssues: patternIssues.length,
|
|
710
|
+
architectureIssues: 0,
|
|
833
711
|
},
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
712
|
+
recommendations,
|
|
713
|
+
metadata: {
|
|
714
|
+
toolName: 'naming-consistency',
|
|
715
|
+
timestamp: new Date().toISOString(),
|
|
716
|
+
},
|
|
717
|
+
} as unknown as ConsistencyReport;
|
|
837
718
|
}
|
|
838
719
|
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
720
|
+
/**
|
|
721
|
+
* Check if an issue severity meets the minimum threshold.
|
|
722
|
+
*<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
|
|
723
|
+
* @param severity - The severity of the issue.
|
|
724
|
+
* @param minSeverity - The minimum severity threshold.
|
|
725
|
+
* @returns True if severity is greater than or equal to minSeverity.
|
|
726
|
+
*/
|
|
727
|
+
function shouldIncludeSeverity(
|
|
728
|
+
severity: Severity | string,
|
|
729
|
+
minSeverity: Severity | string
|
|
730
|
+
): boolean {
|
|
731
|
+
return getSeverityLevel(severity) >= getSeverityLevel(minSeverity);
|
|
845
732
|
}
|
|
846
733
|
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
734
|
+
/**
|
|
735
|
+
* Map string type to IssueType enum value.
|
|
736
|
+
*
|
|
737
|
+
* @param type - The raw issue type string.
|
|
738
|
+
* @returns Normalized IssueType enum.
|
|
739
|
+
*/
|
|
740
|
+
function getIssueType(type: string | undefined): IssueType {
|
|
741
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!type) <span class="cstat-no" title="statement not covered" >return IssueType.NamingInconsistency;</span>
|
|
742
|
+
|
|
743
|
+
// Map string values to enum
|
|
744
|
+
const typeMap: Record<string, IssueType> = {
|
|
745
|
+
'naming-inconsistency': IssueType.NamingInconsistency,
|
|
746
|
+
'naming-quality': IssueType.NamingQuality,
|
|
747
|
+
'pattern-inconsistency': IssueType.PatternInconsistency,
|
|
748
|
+
'architecture-inconsistency': IssueType.ArchitectureInconsistency,
|
|
749
|
+
'error-handling': IssueType.PatternInconsistency,
|
|
750
|
+
'async-style': IssueType.PatternInconsistency,
|
|
751
|
+
'import-style': IssueType.PatternInconsistency,
|
|
752
|
+
'api-design': IssueType.PatternInconsistency,
|
|
753
|
+
};
|
|
754
|
+
|
|
755
|
+
return typeMap[type] || <span class="branch-1 cbranch-no" title="branch not covered" >IssueType.NamingInconsistency;</span>
|
|
861
756
|
}
|
|
862
757
|
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
758
|
+
/**
|
|
759
|
+
* Transform NamingIssue or PatternIssue to the required Issue format.
|
|
760
|
+
*
|
|
761
|
+
* @param i - The raw issue object to transform.
|
|
762
|
+
*<span class="missing-if-branch" title="else path not taken" >E</span> @returns Standardized Issue object.
|
|
763
|
+
*/
|
|
764
|
+
func<span class="missing-if-branch" title="if path not taken" >I</span>tion transformToIssue(i: any): Issue {
|
|
765
|
+
// I<span class="cstat-no" title="statement not covered" >f already has message and location, return as is</span>
|
|
766
|
+
if (i.message && i.location) {
|
|
767
|
+
return {
|
|
768
|
+
type: getIssueType(i.type),
|
|
769
|
+
severity: i.severity as Severity,
|
|
770
|
+
message: i.message,
|
|
771
|
+
<span class="missing-if-branch" title="if path not taken" >I</span> location: i.location,
|
|
772
|
+
suggestion: i.suggestion,
|
|
773
|
+
};
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
// Handle NamingIssue format (has file, line, column, identifier, suggestion)
|
|
777
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (i.identifier || i.type) {
|
|
778
|
+
<span class="missing-if-branch" title="if path not taken" >I</span> const line = i.line || 1;
|
|
779
|
+
const column = i.column || 1;
|
|
780
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>return {
|
|
781
|
+
type: getIssueType(i.type),
|
|
782
|
+
severity: i.severity as Severity,
|
|
783
|
+
message: i.suggestion
|
|
784
|
+
? `Naming issue: ${i.suggestion}`
|
|
785
|
+
: `Naming issue for '${i.identifier || 'unknown'}'`,
|
|
786
|
+
location: {
|
|
787
|
+
<span class="missing-if-branch" title="else path not taken" >E</span> file: i.file || i.fileName || '',
|
|
788
|
+
line,
|
|
789
|
+
column,
|
|
790
|
+
endLine: line,
|
|
791
|
+
endColumn: column + (i.identifier?.length || 10),
|
|
792
|
+
},
|
|
793
|
+
suggestion: i.suggestion,
|
|
794
|
+
<span class="cstat-no" title="statement not covered" > };</span>
|
|
795
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
796
|
+
|
|
797
|
+
// Handle PatternIssue format (has description, files)
|
|
798
|
+
<span class="cstat-no" title="statement not covered" > if (i.description || i.files) {</span>
|
|
799
|
+
const fileName = Array.isArray(i.files) ? <span class="branch-0 cbranch-no" title="branch not covered" >i.files[0] : <span class="branch-0 cbranch-no" title="branch not covered" >i</span>.file || '</span>';
|
|
800
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
801
|
+
<span class="missing-if-branch" title="else path not taken" >E</span> type: getIssueType(i.type),
|
|
802
|
+
severity: i.severity as Severity,
|
|
803
|
+
message: i.description || <span class="branch-1 cbranch-no" title="branch not covered" >'Pattern inconsistency found',</span>
|
|
804
|
+
location: {
|
|
805
|
+
file: fileName,
|
|
806
|
+
line: 1,
|
|
807
|
+
column: 1,
|
|
808
|
+
endLine: 1,
|
|
809
|
+
endColumn: 10,
|
|
810
|
+
},
|
|
811
|
+
suggestion: i.examples?.[0],
|
|
812
|
+
};
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
// Fallback
|
|
816
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
817
|
+
type: getIssueType(i.type),
|
|
818
|
+
severity: i.severity as Severity,
|
|
819
|
+
message: i.message || 'Unknown issue',
|
|
820
|
+
location: i.location || <span class="branch-1 cbranch-no" title="branch not covered" >{ file: '', line: 1, column: 1 },</span>
|
|
821
|
+
suggestion: i.suggestion,
|
|
822
|
+
};
|
|
868
823
|
}
|
|
869
824
|
|
|
870
825
|
function calculateConsistencyScore(issues: ConsistencyIssue[]): number {
|
|
871
|
-
|
|
826
|
+
let totalWeight = 0;
|
|
872
827
|
for (const issue of issues) {
|
|
873
828
|
const val = getSeverityLevel(issue.severity);
|
|
874
829
|
switch (val) {
|
|
@@ -891,66 +846,6 @@ function calculateConsistencyScore(issues: ConsistencyIssue[]): number {
|
|
|
891
846
|
// Score from 0-1, where 1 is perfect
|
|
892
847
|
return Math.max(0, 1 - totalWeight / 100);
|
|
893
848
|
}
|
|
894
|
-
|
|
895
|
-
function generateRecommendations(
|
|
896
|
-
namingIssues: any[],
|
|
897
|
-
patternIssues: any[]
|
|
898
|
-
): string[] {
|
|
899
|
-
const recommendations: string[] = [];
|
|
900
|
-
|
|
901
|
-
if (namingIssues.length > 0) {
|
|
902
|
-
const conventionMixCount = namingIssues.filter(
|
|
903
|
-
(i) => i.type === 'convention-mix'
|
|
904
|
-
).length;
|
|
905
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (conventionMixCount > 0) {
|
|
906
|
-
recommendations.push(
|
|
907
|
-
`Standardize naming conventions: Found ${conventionMixCount} snake_case variables in TypeScript/JavaScript (use camelCase)`
|
|
908
|
-
);
|
|
909
|
-
}
|
|
910
|
-
|
|
911
|
-
const poorNamingCount = namingIssues.filter(
|
|
912
|
-
(i) => i.type === 'poor-naming'
|
|
913
|
-
).length;
|
|
914
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (poorNamingCount > 0) {
|
|
915
|
-
recommendations.push(
|
|
916
|
-
`Improve variable naming: Found ${poorNamingCount} single-letter or unclear variable names`
|
|
917
|
-
);
|
|
918
|
-
}
|
|
919
|
-
}
|
|
920
|
-
|
|
921
|
-
if (patternIssues.length > 0) {
|
|
922
|
-
const errorHandlingIssues = patternIssues.filter(
|
|
923
|
-
(i) => i.type === 'error-handling'
|
|
924
|
-
);
|
|
925
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (errorHandlingIssues.length > 0) {
|
|
926
|
-
recommendations.push(
|
|
927
|
-
'Standardize error handling strategy across the codebase (prefer try-catch with typed errors)'
|
|
928
|
-
);
|
|
929
|
-
}
|
|
930
|
-
|
|
931
|
-
const asyncIssues = patternIssues.filter((i) => i.type === 'async-style');
|
|
932
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (asyncIssues.length > 0) {
|
|
933
|
-
<span class="cstat-no" title="statement not covered" > recommendations.push(</span>
|
|
934
|
-
'Use async/await consistently instead of mixing with promise chains or callbacks'
|
|
935
|
-
);
|
|
936
|
-
}
|
|
937
|
-
|
|
938
|
-
const importIssues = patternIssues.filter((i) => i.type === 'import-style');
|
|
939
|
-
<span class="missing-if-branch" title="else path not taken" >E</span>if (importIssues.length > 0) {
|
|
940
|
-
recommendations.push(
|
|
941
|
-
'Use ES modules consistently across the project (avoid mixing with CommonJS)'
|
|
942
|
-
);
|
|
943
|
-
}
|
|
944
|
-
}
|
|
945
|
-
|
|
946
|
-
if (recommendations.length === 0) {
|
|
947
|
-
recommendations.push(
|
|
948
|
-
'No major consistency issues found! Your codebase follows good practices.'
|
|
949
|
-
);
|
|
950
|
-
}
|
|
951
|
-
|
|
952
|
-
return recommendations;
|
|
953
|
-
}
|
|
954
849
|
</pre></td></tr></table></pre>
|
|
955
850
|
|
|
956
851
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -958,7 +853,7 @@ function generateRecommendations(
|
|
|
958
853
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
959
854
|
Code coverage generated by
|
|
960
855
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
961
|
-
at 2026-03-
|
|
856
|
+
at 2026-03-21T12:56:00.785Z
|
|
962
857
|
</div>
|
|
963
858
|
<script src="../prettify.js"></script>
|
|
964
859
|
<script>
|