@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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">90.27% </span>
26
+ <span class="strong">89.26% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>167/185</span>
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">70.76% </span>
33
+ <span class="strong">65.87% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>92/130</span>
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">97.14% </span>
40
+ <span class="strong">96.15% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>34/35</span>
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">90.14% </span>
47
+ <span class="strong">88.33% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>128/142</span>
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">&nbsp;</span>
327
+ <a name='L262'></a><a href='#L262'>262</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
363
328
  <span class="cline-any cline-neutral">&nbsp;</span>
364
329
  <span class="cline-any cline-neutral">&nbsp;</span>
365
330
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
391
- <span class="cline-any cline-yes">4x</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</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">7x</span>
403
- <span class="cline-any cline-yes">7x</span>
404
- <span class="cline-any cline-neutral">&nbsp;</span>
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">&nbsp;</span>
406
375
  <span class="cline-any cline-yes">49x</span>
407
- <span class="cline-any cline-yes">28x</span>
408
- <span class="cline-any cline-yes">12x</span>
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">&nbsp;</span>
410
- <span class="cline-any cline-yes">7x</span>
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">&nbsp;</span>
413
381
  <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-yes">20x</span>
415
382
  <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-yes">26x</span>
416
384
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
421
- <span class="cline-any cline-yes">4x</span>
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">48x</span>
427
- <span class="cline-any cline-yes">64x</span>
428
- <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
394
+ <span class="cline-any cline-yes">6x</span>
430
395
  <span class="cline-any cline-neutral">&nbsp;</span>
431
396
  <span class="cline-any cline-yes">3x</span>
432
- <span class="cline-any cline-yes">48x</span>
433
- <span class="cline-any cline-yes">48x</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
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">&nbsp;</span>
436
401
  <span class="cline-any cline-no">&nbsp;</span>
437
402
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
439
406
  <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-yes">3x</span>
440
408
  <span class="cline-any cline-neutral">&nbsp;</span>
441
409
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
445
- <span class="cline-any cline-yes">48x</span>
446
410
  <span class="cline-any cline-neutral">&nbsp;</span>
447
411
  <span class="cline-any cline-neutral">&nbsp;</span>
448
412
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</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">&nbsp;</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">&nbsp;</span>
457
424
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
459
428
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</span>
465
439
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
446
+ <span class="cline-any cline-yes">9x</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
467
451
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</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">&nbsp;</span>
481
456
  <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-yes">3x</span>
482
458
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
487
463
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
495
- <span class="cline-any cline-yes">93x</span>
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">&nbsp;</span>
498
- <span class="cline-any cline-yes">30x</span>
499
468
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
470
+ <span class="cline-any cline-yes">16x</span>
503
471
  <span class="cline-any cline-neutral">&nbsp;</span>
504
472
  <span class="cline-any cline-neutral">&nbsp;</span>
505
473
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
509
475
  <span class="cline-any cline-neutral">&nbsp;</span>
510
476
  <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-yes">28x</span>
512
477
  <span class="cline-any cline-neutral">&nbsp;</span>
513
478
  <span class="cline-any cline-neutral">&nbsp;</span>
514
479
  <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-yes">4x</span>
480
+ <span class="cline-any cline-yes">9x</span>
516
481
  <span class="cline-any cline-neutral">&nbsp;</span>
517
482
  <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-yes">48x</span>
519
- <span class="cline-any cline-yes">99x</span>
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">&nbsp;</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">&nbsp;</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">&nbsp;</span>
527
- <span class="cline-any cline-yes">16x</span>
528
488
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
492
+ <span class="cline-any cline-yes">21x</span>
530
493
  <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-yes">9x</span>
531
495
  <span class="cline-any cline-neutral">&nbsp;</span>
532
496
  <span class="cline-any cline-neutral">&nbsp;</span>
533
497
  <span class="cline-any cline-neutral">&nbsp;</span>
534
- <span class="cline-any cline-yes">10x</span>
535
498
  <span class="cline-any cline-neutral">&nbsp;</span>
536
499
  <span class="cline-any cline-yes">3x</span>
537
- <span class="cline-any cline-yes">28x</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
541
508
  <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-yes">470x</span>
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">&nbsp;</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">&nbsp;</span>
550
513
  <span class="cline-any cline-neutral">&nbsp;</span>
551
514
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
557
- <span class="cline-any cline-yes">44x</span>
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">&nbsp;</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">&nbsp;</span>
562
- <span class="cline-any cline-yes">51x</span>
563
- <span class="cline-any cline-no">&nbsp;</span>
564
522
  <span class="cline-any cline-neutral">&nbsp;</span>
565
523
  <span class="cline-any cline-neutral">&nbsp;</span>
566
524
  <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-no">&nbsp;</span>
568
- <span class="cline-any cline-no">&nbsp;</span>
569
- <span class="cline-any cline-no">&nbsp;</span>
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">&nbsp;</span>
571
- <span class="cline-any cline-yes">110x</span>
572
529
  <span class="cline-any cline-neutral">&nbsp;</span>
573
530
  <span class="cline-any cline-neutral">&nbsp;</span>
574
531
  <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-yes">22x</span>
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">&nbsp;</span>
581
534
  <span class="cline-any cline-no">&nbsp;</span>
582
535
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
589
- <span class="cline-any cline-no">&nbsp;</span>
590
537
  <span class="cline-any cline-no">&nbsp;</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-yes">3x</span>
592
539
  <span class="cline-any cline-no">&nbsp;</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">&nbsp;</span>
594
543
  <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-yes">19x</span>
597
- <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-yes">3x</span>
600
545
  <span class="cline-any cline-neutral">&nbsp;</span>
601
546
  <span class="cline-any cline-neutral">&nbsp;</span>
602
547
  <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-yes">4x</span>
604
548
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
612
551
  <span class="cline-any cline-neutral">&nbsp;</span>
613
552
  <span class="cline-any cline-neutral">&nbsp;</span>
614
553
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
618
- <span class="cline-any cline-yes">3x</span>
619
- <span class="cline-any cline-yes">3x</span>
555
+ <span class="cline-any cline-no">&nbsp;</span>
620
556
  <span class="cline-any cline-neutral">&nbsp;</span>
621
557
  <span class="cline-any cline-neutral">&nbsp;</span>
622
558
  <span class="cline-any cline-neutral">&nbsp;</span>
623
559
  <span class="cline-any cline-neutral">&nbsp;</span>
624
560
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
632
563
  <span class="cline-any cline-neutral">&nbsp;</span>
633
564
  <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
635
- <span class="cline-any cline-yes">4x</span>
636
- <span class="cline-any cline-yes">2x</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
637
571
  <span class="cline-any cline-no">&nbsp;</span>
638
572
  <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span>
579
+ <span class="cline-any cline-no">&nbsp;</span>
580
+ <span class="cline-any cline-no">&nbsp;</span>
647
581
  <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
653
583
  <span class="cline-any cline-neutral">&nbsp;</span>
654
584
  <span class="cline-any cline-neutral">&nbsp;</span>
655
585
  <span class="cline-any cline-neutral">&nbsp;</span>
656
- <span class="cline-any cline-yes">4x</span>
586
+ <span class="cline-any cline-yes">6x</span>
657
587
  <span class="cline-any cline-neutral">&nbsp;</span>
658
588
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
659
589
  scanFiles,
660
590
  Severity,
661
591
  IssueType,
662
- GLOBAL_SCAN_OPTIONS,
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
  &nbsp;
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
- minSeverity = Severity.Info,
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
+ &nbsp;
623
+ // Mark intentionally-unused option to avoid lint warnings
624
+ void checkArchitecture;
688
625
  &nbsp;
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
  &nbsp;
@@ -715,160 +649,181 @@ export async function analyzeConsistency(
715
649
  &nbsp;
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
  &nbsp;
722
- const consistencyIssue: ConsistencyIssue = {
723
- type:
724
- issue.type === 'convention-mix'
725
- ? IssueType.NamingInconsistency
726
- : IssueType.NamingQuality,
727
- category: 'naming',
728
- severity: getSeverityEnum(issue.severity),
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
- &nbsp;
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
- &nbsp;
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
- &nbsp;
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
  &nbsp;
763
- // Add to first file in the pattern
764
- const firstFile = issue.files[0];
765
- if (firstFile &amp;&amp; !fileIssuesMap.has(firstFile)) {
766
- fileIssuesMap.set(firstFile, []);
767
- }
768
- <span class="missing-if-branch" title="else path not taken" >E</span>if (firstFile) {
769
- fileIssuesMap.get(firstFile)!.push(consistencyIssue);
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
- &nbsp;
773
- // Convert to AnalysisResult format
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 as Issue[],
682
+ issues: issues.map((i) =&gt; transformToIssue(i)),
778
683
  metrics: {
779
684
  consistencyScore: calculateConsistencyScore(issues),
780
685
  },
781
686
  });
782
687
  }
783
688
  &nbsp;
784
- // Sort results by severity first, then by issue count per file
785
- results.sort((fileResultA, fileResultB) =&gt; {
786
- // Get highest severity in each file
787
- const maxSeverityA = Math.min(
788
- ...fileResultA.issues.map((i) =&gt; {
789
- const val = getSeverityLevel((i as ConsistencyIssue).severity);
790
- // Map 4-&gt;0, 3-&gt;1, 2-&gt;2, 1-&gt;3
791
- 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>
792
- })
793
- );
794
- const maxSeverityB = Math.min(
795
- ...fileResultB.issues.map((i) =&gt; {
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 &gt; 0) {
692
+ recommendations.push('Standardize naming conventions across the codebase');
693
+ }
694
+ if (patternIssues.length &gt; 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) =&gt; (r.metrics?.consistencyScore ?? <span class="branch-1 cbranch-no" title="branch not covered" >1) &lt; 0</span>.8)) {
698
+ recommendations.push(
699
+ 'Improve cross-module consistency to reduce AI confusion'
799
700
  );
800
- &nbsp;
801
- // Sort by severity first
802
- if (maxSeverityA !== maxSeverityB) {
803
- return maxSeverityA - maxSeverityB;
804
- }
805
- &nbsp;
806
- // Then by issue count (descending)
807
- return fileResultB.issues.length - fileResultA.issues.length;
808
- });
809
- &nbsp;
810
- // Generate recommendations
811
- const recommendations = generateRecommendations(namingIssues, patternIssues);
812
- &nbsp;
813
- // Compute filtered counts (respecting minSeverity) to report accurate summary
814
- const namingCountFiltered = namingIssues.filter((i) =&gt;
815
- shouldIncludeSeverity(i.severity, minSeverity)
816
- ).length;
817
- const patternCountFiltered = patternIssues.filter((i) =&gt;
818
- shouldIncludeSeverity(i.severity, minSeverity)
819
- ).length;
701
+ }
820
702
  &nbsp;
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
- config: Object.fromEntries(
829
- Object.entries(options).filter(
830
- ([key]) =&gt; !GLOBAL_SCAN_OPTIONS.includes(key) || key === 'rootDir'
831
- )
832
- <span class="missing-if-branch" title="else path not taken" >E</span> ),
707
+ totalIssues: results.reduce((acc, r) =&gt; acc + r.issues.length, 0),
708
+ namingIssues: namingIssues.length,
709
+ patternIssues: patternIssues.length,
710
+ architectureIssues: 0,
833
711
  },
834
- <span class="missing-if-branch" title="if path not taken" >I</span>results,
835
- re<span class="cstat-no" title="statement not covered" >commendations,</span>
836
- };
712
+ recommendations,
713
+ metadata: {
714
+ toolName: 'naming-consistency',
715
+ timestamp: new Date().toISOString(),
716
+ },
717
+ } as unknown as ConsistencyReport;
837
718
  }
838
719
  &nbsp;
839
- function getSeverityLevel(s: any): number {
840
- if (s === Severity.Critical || s === 'critical') return 4;
841
- if<span class="missing-if-branch" title="if path not taken" >I</span> (s === Severity.Major || s === 'major') return 3;
842
- if (<span class="cstat-no" title="statement not covered" >s === Severity.Minor || s === 'minor') return 2;</span>
843
- if (s === Severity.Info || s === 'info') return 1;
844
- <span class="cstat-no" title="statement not covered" > return 0;</span>
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) &gt;= getSeverityLevel(minSeverity);
845
732
  }
846
733
  &nbsp;
847
- function getSeverityEnum(s: any): Severity {
848
- <span class="missing-if-branch" title="if path not taken" >I</span>const val = getSeverityLevel(s);
849
- switch (val) {
850
- <span class="branch-0 cbranch-no" title="branch not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>case 4:</span>
851
- <span class="cstat-no" title="statement not covered" > return Severity.Critical;</span>
852
- case 3:
853
- return Severity.Major;
854
- case 2:
855
- return Severity.Minor;
856
- <span class="branch-3 cbranch-no" title="branch not covered" > case 1:</span>
857
- <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" > return Severity.Info;</span></span>
858
- <span class="branch-4 cbranch-no" title="branch not covered" > default:</span>
859
- <span class="cstat-no" title="statement not covered" > return Severity.Info;</span>
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
+ &nbsp;
743
+ // Map string values to enum
744
+ const typeMap: Record&lt;string, IssueType&gt; = {
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
+ &nbsp;
755
+ return typeMap[type] || <span class="branch-1 cbranch-no" title="branch not covered" >IssueType.NamingInconsistency;</span>
861
756
  }
862
757
  &nbsp;
863
- function shouldIncludeSev<span class="cstat-no" title="statement not covered" >erity(<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
864
- se<span class="cstat-no" title="statement not covered" >verity: Severity | string,</span>
865
- minS<span class="cstat-no" title="statement not covered" >everity: Severity | string</span>
866
- ): boolean {
867
- return getSeverityLevel(severity) &gt;= getSeverityLevel(minSeverity);
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 &amp;&amp; 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
+ &nbsp;
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
+ &nbsp;
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
+ &nbsp;
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
  &nbsp;
870
825
  function calculateConsistencyScore(issues: ConsistencyIssue[]): number {
871
- <span class="missing-if-branch" title="else path not taken" >E</span>let totalWeight = 0;
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
- &nbsp;
895
- function generateRecommendations(
896
- namingIssues: any[],
897
- patternIssues: any[]
898
- ): string[] {
899
- const recommendations: string[] = [];
900
- &nbsp;
901
- if (namingIssues.length &gt; 0) {
902
- const conventionMixCount = namingIssues.filter(
903
- (i) =&gt; i.type === 'convention-mix'
904
- ).length;
905
- <span class="missing-if-branch" title="else path not taken" >E</span>if (conventionMixCount &gt; 0) {
906
- recommendations.push(
907
- `Standardize naming conventions: Found ${conventionMixCount} snake_case variables in TypeScript/JavaScript (use camelCase)`
908
- );
909
- }
910
- &nbsp;
911
- const poorNamingCount = namingIssues.filter(
912
- (i) =&gt; i.type === 'poor-naming'
913
- ).length;
914
- <span class="missing-if-branch" title="else path not taken" >E</span>if (poorNamingCount &gt; 0) {
915
- recommendations.push(
916
- `Improve variable naming: Found ${poorNamingCount} single-letter or unclear variable names`
917
- );
918
- }
919
- }
920
- &nbsp;
921
- if (patternIssues.length &gt; 0) {
922
- const errorHandlingIssues = patternIssues.filter(
923
- (i) =&gt; i.type === 'error-handling'
924
- );
925
- <span class="missing-if-branch" title="else path not taken" >E</span>if (errorHandlingIssues.length &gt; 0) {
926
- recommendations.push(
927
- 'Standardize error handling strategy across the codebase (prefer try-catch with typed errors)'
928
- );
929
- }
930
- &nbsp;
931
- const asyncIssues = patternIssues.filter((i) =&gt; i.type === 'async-style');
932
- <span class="missing-if-branch" title="if path not taken" >I</span>if (asyncIssues.length &gt; 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
- &nbsp;
938
- const importIssues = patternIssues.filter((i) =&gt; i.type === 'import-style');
939
- <span class="missing-if-branch" title="else path not taken" >E</span>if (importIssues.length &gt; 0) {
940
- recommendations.push(
941
- 'Use ES modules consistently across the project (avoid mixing with CommonJS)'
942
- );
943
- }
944
- }
945
- &nbsp;
946
- if (recommendations.length === 0) {
947
- recommendations.push(
948
- 'No major consistency issues found! Your codebase follows good practices.'
949
- );
950
- }
951
- &nbsp;
952
- return recommendations;
953
- }
954
849
  &nbsp;</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-09T03:06:05.217Z
856
+ at 2026-03-21T12:56:00.785Z
962
857
  </div>
963
858
  <script src="../prettify.js"></script>
964
859
  <script>