@shakibkhatri/idiolect-core 0.0.1 → 0.1.1

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.
Files changed (47) hide show
  1. package/dist/analyzer-go.js +3 -5
  2. package/dist/analyzer-go.js.map +1 -1
  3. package/dist/analyzer-py.js +3 -5
  4. package/dist/analyzer-py.js.map +1 -1
  5. package/dist/analyzer.d.ts +3 -1
  6. package/dist/analyzer.js +10 -5
  7. package/dist/analyzer.js.map +1 -1
  8. package/dist/baseline.js +3 -2
  9. package/dist/baseline.js.map +1 -1
  10. package/dist/check.d.ts +5 -0
  11. package/dist/check.js +6 -5
  12. package/dist/check.js.map +1 -1
  13. package/dist/collector.d.ts +1 -0
  14. package/dist/collector.js +18 -7
  15. package/dist/collector.js.map +1 -1
  16. package/dist/config.d.ts +21 -0
  17. package/dist/config.js +13 -0
  18. package/dist/config.js.map +1 -1
  19. package/dist/index.d.ts +5 -3
  20. package/dist/index.js +5 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/llm.js +46 -29
  23. package/dist/llm.js.map +1 -1
  24. package/dist/metrics.js +1 -0
  25. package/dist/metrics.js.map +1 -1
  26. package/dist/profile.d.ts +10 -0
  27. package/dist/profile.js +16 -2
  28. package/dist/profile.js.map +1 -1
  29. package/dist/render.d.ts +1 -0
  30. package/dist/render.js +55 -9
  31. package/dist/render.js.map +1 -1
  32. package/dist/served.d.ts +8 -0
  33. package/dist/served.js +39 -0
  34. package/dist/served.js.map +1 -0
  35. package/dist/styles.d.ts +41 -0
  36. package/dist/styles.js +77 -0
  37. package/dist/styles.js.map +1 -0
  38. package/dist/unbot.js +2 -2
  39. package/dist/unbot.js.map +1 -1
  40. package/dist/writer.d.ts +4 -3
  41. package/dist/writer.js +14 -5
  42. package/dist/writer.js.map +1 -1
  43. package/package.json +2 -1
  44. package/styles/go-caddy.json +1369 -0
  45. package/styles/kotlin-tivi.json +1506 -0
  46. package/styles/python-httpx.json +1053 -0
  47. package/styles/typescript-vue.json +1474 -0
@@ -0,0 +1,1506 @@
1
+ {
2
+ "version": 1,
3
+ "id": "kotlin-tivi",
4
+ "title": "Tivi",
5
+ "summary": "Few comments, no KDoc, noun-phrase names, short plain commits",
6
+ "language": "kotlin",
7
+ "source": {
8
+ "project": "github.com/chrisbanes/tivi",
9
+ "license": "Apache-2.0",
10
+ "commit": "92cd468cc7fc0c25d2b29ab61104ca7b22c0e0e4",
11
+ "snapshot": "2023-12-30T12:38:44Z",
12
+ "lines": 25584
13
+ },
14
+ "stats": {
15
+ "files": 640,
16
+ "loc": 25584,
17
+ "functions": {
18
+ "count": 1324,
19
+ "blockBody": 721,
20
+ "expressionBody": 427,
21
+ "lengthLines": {
22
+ "1": 2,
23
+ "3": 172,
24
+ "4": 67,
25
+ "5": 58,
26
+ "6": 29,
27
+ "7": 42,
28
+ "8": 30,
29
+ "9": 31,
30
+ "10": 9,
31
+ "11": 11,
32
+ "12": 15,
33
+ "13": 14,
34
+ "14": 10,
35
+ "15": 9,
36
+ "16": 11,
37
+ "17": 15,
38
+ "18": 11,
39
+ "19": 11,
40
+ "20": 9,
41
+ "21": 8,
42
+ "22": 8,
43
+ "23": 6,
44
+ "24": 11,
45
+ "25": 7,
46
+ "26": 11,
47
+ "27": 7,
48
+ "28": 4,
49
+ "29": 7,
50
+ "30": 2,
51
+ "31": 4,
52
+ "32": 3,
53
+ "33": 6,
54
+ "34": 4,
55
+ "35": 1,
56
+ "36": 4,
57
+ "37": 3,
58
+ "38": 3,
59
+ "39": 3,
60
+ "40": 3,
61
+ "41": 4,
62
+ "42": 2,
63
+ "43": 2,
64
+ "44": 1,
65
+ "45": 2,
66
+ "47": 3,
67
+ "48": 1,
68
+ "49": 1,
69
+ "51": 1,
70
+ "52": 1,
71
+ "54": 2,
72
+ "57": 1,
73
+ "58": 3,
74
+ "60": 2,
75
+ "61": 2,
76
+ "62": 1,
77
+ "64": 1,
78
+ "65": 1,
79
+ "66": 3,
80
+ "72": 2,
81
+ "73": 1,
82
+ "76": 2,
83
+ "77": 1,
84
+ "81": 1,
85
+ "88": 1,
86
+ "90": 1,
87
+ "92": 1,
88
+ "95": 2,
89
+ "98": 1,
90
+ "103": 1,
91
+ "104": 1,
92
+ "107": 1,
93
+ "113": 1,
94
+ "121": 1,
95
+ "130": 1,
96
+ "142": 1,
97
+ "152": 1,
98
+ "155": 1,
99
+ "159": 1,
100
+ "160": 1,
101
+ "167": 1,
102
+ "168": 1
103
+ },
104
+ "params": {
105
+ "0": 295,
106
+ "1": 664,
107
+ "2": 219,
108
+ "3": 51,
109
+ "4": 32,
110
+ "5": 23,
111
+ "6": 10,
112
+ "7": 7,
113
+ "8": 5,
114
+ "9": 4,
115
+ "10": 4,
116
+ "11": 4,
117
+ "12": 2,
118
+ "14": 2,
119
+ "16": 1,
120
+ "26": 1
121
+ },
122
+ "maxNesting": {
123
+ "0": 358,
124
+ "1": 173,
125
+ "2": 87,
126
+ "3": 55,
127
+ "4": 33,
128
+ "5": 10,
129
+ "6": 3,
130
+ "7": 2
131
+ },
132
+ "earlyReturn": 27
133
+ },
134
+ "naming": {
135
+ "casing": {
136
+ "function": {
137
+ "camel": 1080,
138
+ "pascal": 142,
139
+ "snake": 0,
140
+ "screaming": 0,
141
+ "backtick": 0,
142
+ "other": 0
143
+ },
144
+ "class": {
145
+ "camel": 0,
146
+ "pascal": 712,
147
+ "snake": 0,
148
+ "screaming": 0,
149
+ "backtick": 0,
150
+ "other": 0
151
+ },
152
+ "property": {
153
+ "camel": 303,
154
+ "pascal": 29,
155
+ "snake": 2,
156
+ "screaming": 15,
157
+ "backtick": 0,
158
+ "other": 0
159
+ },
160
+ "local": {
161
+ "camel": 638,
162
+ "pascal": 0,
163
+ "snake": 0,
164
+ "screaming": 0,
165
+ "backtick": 0,
166
+ "other": 0
167
+ },
168
+ "parameter": {
169
+ "camel": 2809,
170
+ "pascal": 0,
171
+ "snake": 12,
172
+ "screaming": 0,
173
+ "backtick": 0,
174
+ "other": 45
175
+ },
176
+ "constant": {
177
+ "camel": 5,
178
+ "pascal": 0,
179
+ "snake": 5,
180
+ "screaming": 33,
181
+ "backtick": 0,
182
+ "other": 0
183
+ }
184
+ },
185
+ "nameLength": {
186
+ "function": {
187
+ "1": 28,
188
+ "3": 48,
189
+ "4": 29,
190
+ "5": 20,
191
+ "6": 178,
192
+ "7": 41,
193
+ "8": 32,
194
+ "9": 66,
195
+ "10": 48,
196
+ "11": 45,
197
+ "12": 63,
198
+ "13": 38,
199
+ "14": 30,
200
+ "15": 77,
201
+ "16": 72,
202
+ "17": 64,
203
+ "18": 49,
204
+ "19": 27,
205
+ "20": 40,
206
+ "21": 28,
207
+ "22": 24,
208
+ "23": 29,
209
+ "24": 10,
210
+ "25": 15,
211
+ "26": 17,
212
+ "27": 23,
213
+ "28": 16,
214
+ "29": 12,
215
+ "30": 3,
216
+ "31": 10,
217
+ "32": 7,
218
+ "33": 4,
219
+ "34": 10,
220
+ "35": 5,
221
+ "36": 4,
222
+ "37": 2,
223
+ "38": 3,
224
+ "40": 3,
225
+ "46": 2
226
+ },
227
+ "class": {
228
+ "4": 2,
229
+ "5": 4,
230
+ "6": 47,
231
+ "7": 12,
232
+ "8": 6,
233
+ "9": 12,
234
+ "10": 29,
235
+ "11": 20,
236
+ "12": 31,
237
+ "13": 27,
238
+ "14": 26,
239
+ "15": 57,
240
+ "16": 32,
241
+ "17": 43,
242
+ "18": 36,
243
+ "19": 24,
244
+ "20": 44,
245
+ "21": 36,
246
+ "22": 31,
247
+ "23": 36,
248
+ "24": 23,
249
+ "25": 25,
250
+ "26": 21,
251
+ "27": 15,
252
+ "28": 16,
253
+ "29": 16,
254
+ "30": 10,
255
+ "31": 6,
256
+ "32": 4,
257
+ "33": 3,
258
+ "34": 7,
259
+ "35": 6,
260
+ "36": 3,
261
+ "37": 1,
262
+ "38": 1
263
+ },
264
+ "property": {
265
+ "2": 5,
266
+ "4": 13,
267
+ "5": 15,
268
+ "6": 24,
269
+ "7": 14,
270
+ "8": 27,
271
+ "9": 22,
272
+ "10": 30,
273
+ "11": 28,
274
+ "12": 23,
275
+ "13": 25,
276
+ "14": 15,
277
+ "15": 12,
278
+ "16": 7,
279
+ "17": 7,
280
+ "18": 17,
281
+ "19": 9,
282
+ "20": 14,
283
+ "21": 4,
284
+ "22": 12,
285
+ "23": 11,
286
+ "24": 5,
287
+ "26": 5,
288
+ "27": 3,
289
+ "30": 1,
290
+ "31": 1
291
+ },
292
+ "local": {
293
+ "1": 8,
294
+ "2": 6,
295
+ "3": 10,
296
+ "4": 37,
297
+ "5": 54,
298
+ "6": 47,
299
+ "7": 79,
300
+ "8": 32,
301
+ "9": 53,
302
+ "10": 95,
303
+ "11": 52,
304
+ "12": 30,
305
+ "13": 26,
306
+ "14": 30,
307
+ "15": 14,
308
+ "16": 18,
309
+ "17": 15,
310
+ "18": 6,
311
+ "19": 3,
312
+ "20": 15,
313
+ "22": 3,
314
+ "24": 1,
315
+ "25": 2,
316
+ "27": 1,
317
+ "29": 1
318
+ },
319
+ "parameter": {
320
+ "1": 3,
321
+ "2": 71,
322
+ "3": 43,
323
+ "4": 213,
324
+ "5": 255,
325
+ "6": 369,
326
+ "7": 607,
327
+ "8": 348,
328
+ "9": 213,
329
+ "10": 90,
330
+ "11": 78,
331
+ "12": 84,
332
+ "13": 87,
333
+ "14": 62,
334
+ "15": 66,
335
+ "16": 56,
336
+ "17": 52,
337
+ "18": 50,
338
+ "19": 22,
339
+ "20": 19,
340
+ "21": 16,
341
+ "22": 6,
342
+ "23": 9,
343
+ "24": 3,
344
+ "25": 12,
345
+ "26": 6,
346
+ "27": 7,
347
+ "28": 5,
348
+ "29": 3,
349
+ "30": 1,
350
+ "31": 2,
351
+ "32": 1,
352
+ "33": 2,
353
+ "34": 2,
354
+ "35": 1,
355
+ "36": 1,
356
+ "38": 1
357
+ },
358
+ "constant": {
359
+ "2": 1,
360
+ "3": 1,
361
+ "5": 3,
362
+ "6": 1,
363
+ "7": 4,
364
+ "8": 1,
365
+ "9": 5,
366
+ "10": 2,
367
+ "11": 1,
368
+ "14": 5,
369
+ "15": 2,
370
+ "16": 4,
371
+ "17": 2,
372
+ "18": 1,
373
+ "19": 2,
374
+ "20": 1,
375
+ "22": 1,
376
+ "24": 2,
377
+ "26": 2,
378
+ "27": 1,
379
+ "30": 1
380
+ }
381
+ },
382
+ "functionVerb": {
383
+ "standard": 1,
384
+ "on": 18,
385
+ "from": 2,
386
+ "handle": 5,
387
+ "finish": 1,
388
+ "startup": 1,
389
+ "provide": 101,
390
+ "get": 100,
391
+ "select": 1,
392
+ "initialize": 10,
393
+ "refresh": 6,
394
+ "log": 5,
395
+ "create": 59,
396
+ "bind": 51,
397
+ "intercept": 5,
398
+ "is": 12,
399
+ "as": 5,
400
+ "find": 3,
401
+ "build": 4,
402
+ "map": 32,
403
+ "content": 2,
404
+ "show": 16,
405
+ "report": 4,
406
+ "color": 4,
407
+ "entry": 19,
408
+ "haze": 1,
409
+ "body": 1,
410
+ "item": 2,
411
+ "gutter": 2,
412
+ "full": 1,
413
+ "append": 1,
414
+ "prepend": 1,
415
+ "remember": 4,
416
+ "then": 1,
417
+ "nested": 1,
418
+ "tivi": 4,
419
+ "should": 5,
420
+ "auto": 1,
421
+ "backdrop": 4,
422
+ "placeholder": 2,
423
+ "date": 5,
424
+ "time": 4,
425
+ "clickable": 1,
426
+ "empty": 2,
427
+ "expanding": 1,
428
+ "draw": 3,
429
+ "scrimmed": 1,
430
+ "scrim": 1,
431
+ "async": 1,
432
+ "result": 1,
433
+ "size": 1,
434
+ "measure": 1,
435
+ "set": 12,
436
+ "to": 8,
437
+ "align": 1,
438
+ "update": 31,
439
+ "loading": 1,
440
+ "copy": 2,
441
+ "plus": 1,
442
+ "minus": 1,
443
+ "coerce": 1,
444
+ "poster": 4,
445
+ "checkbox": 1,
446
+ "preference": 3,
447
+ "search": 11,
448
+ "sort": 2,
449
+ "label": 1,
450
+ "user": 2,
451
+ "ui": 3,
452
+ "emit": 1,
453
+ "clear": 8,
454
+ "view": 2,
455
+ "add": 13,
456
+ "action": 5,
457
+ "font": 4,
458
+ "read": 2,
459
+ "fmt": 4,
460
+ "format": 28,
461
+ "airs": 5,
462
+ "followed": 1,
463
+ "season": 14,
464
+ "episode": 25,
465
+ "genre": 2,
466
+ "track": 3,
467
+ "lerp": 2,
468
+ "combine": 5,
469
+ "fluent": 1,
470
+ "parallel": 1,
471
+ "v": 5,
472
+ "d": 5,
473
+ "i": 6,
474
+ "e": 6,
475
+ "w": 6,
476
+ "invoke": 28,
477
+ "composite": 1,
478
+ "send": 1,
479
+ "trace": 2,
480
+ "observe": 39,
481
+ "toggle": 2,
482
+ "decode": 11,
483
+ "encode": 11,
484
+ "insert": 17,
485
+ "upsert": 6,
486
+ "episodes": 2,
487
+ "delete": 65,
488
+ "mapper": 1,
489
+ "watches": 4,
490
+ "watch": 3,
491
+ "entries": 46,
492
+ "last": 2,
493
+ "request": 2,
494
+ "paged": 4,
495
+ "seasons": 5,
496
+ "trakt": 3,
497
+ "image": 2,
498
+ "save": 11,
499
+ "remove": 10,
500
+ "has": 2,
501
+ "sync": 6,
502
+ "need": 6,
503
+ "mark": 6,
504
+ "fetch": 3,
505
+ "process": 4,
506
+ "merge": 3,
507
+ "pull": 1,
508
+ "invalidate": 2,
509
+ "pair": 2,
510
+ "parse": 2,
511
+ "syncer": 2,
512
+ "filter": 2,
513
+ "store": 1,
514
+ "using": 1,
515
+ "reader": 1,
516
+ "write": 1,
517
+ "shows": 1,
518
+ "register": 6,
519
+ "serialize": 4,
520
+ "login": 1,
521
+ "logout": 1,
522
+ "cache": 1,
523
+ "main": 1,
524
+ "do": 26,
525
+ "unfollow": 1,
526
+ "follow": 1,
527
+ "load": 2,
528
+ "configure": 4,
529
+ "apply": 2,
530
+ "compose": 1,
531
+ "determine": 1,
532
+ "name": 1,
533
+ "schedule": 1,
534
+ "run": 1,
535
+ "next": 3,
536
+ "swipeable": 1,
537
+ "reset": 3,
538
+ "swipe": 2,
539
+ "animate": 1,
540
+ "present": 15,
541
+ "account": 2,
542
+ "app": 1,
543
+ "preview": 3,
544
+ "dev": 2,
545
+ "event": 14,
546
+ "discover": 2,
547
+ "carousel": 1,
548
+ "header": 2,
549
+ "info": 3,
550
+ "library": 4,
551
+ "popular": 1,
552
+ "recommended": 1,
553
+ "home": 5,
554
+ "for": 1,
555
+ "previous": 1,
556
+ "go": 1,
557
+ "pop": 1,
558
+ "settings": 1,
559
+ "theme": 2,
560
+ "network": 1,
561
+ "runtime": 1,
562
+ "certificate": 1,
563
+ "genres": 1,
564
+ "related": 1,
565
+ "pager": 1,
566
+ "trending": 1,
567
+ "up": 4
568
+ },
569
+ "booleanPrefix": {
570
+ "is": 19,
571
+ "should": 2,
572
+ "use": 4,
573
+ "library": 4,
574
+ "up": 2,
575
+ "ignore": 2,
576
+ "report": 4,
577
+ "developer": 2,
578
+ "get": 1,
579
+ "need": 6,
580
+ "process": 2,
581
+ "has": 2,
582
+ "refreshing": 1,
583
+ "dynamic": 4,
584
+ "open": 1
585
+ },
586
+ "abbreviated": 279,
587
+ "identifiers": 5830,
588
+ "testNames": {
589
+ "camel": 54,
590
+ "camelSentence": 28,
591
+ "snake": 20
592
+ },
593
+ "genericNames": 0
594
+ },
595
+ "tests": {
596
+ "files": 24,
597
+ "loc": 1329,
598
+ "functions": 102
599
+ },
600
+ "comments": {
601
+ "line": 1613,
602
+ "block": 3,
603
+ "doc": 35,
604
+ "chars": 88075,
605
+ "lowercaseStart": 85,
606
+ "trailingPeriod": 47,
607
+ "todo": {
608
+ "TODO:": 4,
609
+ "TODO": 6,
610
+ "FIXME": 1
611
+ },
612
+ "tells": {},
613
+ "publicDecls": 2020,
614
+ "publicDocumented": 22,
615
+ "privateDecls": 394,
616
+ "privateDocumented": 9
617
+ },
618
+ "errors": {
619
+ "tryCatch": 29,
620
+ "runCatching": 13,
621
+ "resultType": 23,
622
+ "forceUnwrap": 58
623
+ },
624
+ "kotlin": {
625
+ "when3": 63,
626
+ "ifElseChain3": 2,
627
+ "sealedInterface": 15,
628
+ "sealedClass": 2,
629
+ "extensionFunctions": 91,
630
+ "dataClasses": 146,
631
+ "composables": 167,
632
+ "modifierParamFirst": 7,
633
+ "modifierParamLater": 96,
634
+ "remember": 171
635
+ },
636
+ "typescript": {
637
+ "arrowFunctions": 0,
638
+ "functionDeclarations": 0,
639
+ "typeAliases": 0,
640
+ "interfaces": 0,
641
+ "optionalChains": 0,
642
+ "anyTypes": 0
643
+ },
644
+ "python": {
645
+ "typeHinted": 0,
646
+ "fStrings": 0,
647
+ "formatCalls": 0,
648
+ "comprehensions": 0,
649
+ "bareExcepts": 0,
650
+ "dataclasses": 0
651
+ },
652
+ "go": {
653
+ "errChecks": 0,
654
+ "namedReturns": 0,
655
+ "structs": 0,
656
+ "interfaces": 0,
657
+ "panics": 0
658
+ }
659
+ },
660
+ "commitStats": {
661
+ "count": 3110,
662
+ "subjectLength": {
663
+ "4": 1,
664
+ "6": 2,
665
+ "7": 1,
666
+ "8": 4,
667
+ "9": 11,
668
+ "10": 4,
669
+ "11": 19,
670
+ "12": 14,
671
+ "13": 17,
672
+ "14": 29,
673
+ "15": 20,
674
+ "16": 25,
675
+ "17": 37,
676
+ "18": 36,
677
+ "19": 73,
678
+ "20": 58,
679
+ "21": 71,
680
+ "22": 68,
681
+ "23": 78,
682
+ "24": 81,
683
+ "25": 89,
684
+ "26": 86,
685
+ "27": 114,
686
+ "28": 95,
687
+ "29": 91,
688
+ "30": 97,
689
+ "31": 92,
690
+ "32": 107,
691
+ "33": 115,
692
+ "34": 121,
693
+ "35": 114,
694
+ "36": 96,
695
+ "37": 118,
696
+ "38": 99,
697
+ "39": 98,
698
+ "40": 90,
699
+ "41": 83,
700
+ "42": 75,
701
+ "43": 89,
702
+ "44": 73,
703
+ "45": 50,
704
+ "46": 58,
705
+ "47": 62,
706
+ "48": 38,
707
+ "49": 46,
708
+ "50": 39,
709
+ "51": 32,
710
+ "52": 24,
711
+ "53": 31,
712
+ "54": 17,
713
+ "55": 17,
714
+ "56": 17,
715
+ "57": 19,
716
+ "58": 6,
717
+ "59": 11,
718
+ "60": 7,
719
+ "61": 5,
720
+ "62": 6,
721
+ "63": 5,
722
+ "64": 3,
723
+ "65": 6,
724
+ "66": 6,
725
+ "68": 5,
726
+ "70": 2,
727
+ "71": 1,
728
+ "72": 1,
729
+ "73": 1,
730
+ "75": 2,
731
+ "77": 1,
732
+ "78": 1
733
+ },
734
+ "lowercaseStart": 13,
735
+ "conventionalPrefix": 0,
736
+ "trailingPeriod": 4,
737
+ "withBody": 570,
738
+ "bodyLines": 1556,
739
+ "bodyLinesWrapped": 1528,
740
+ "tense": {
741
+ "imperative": 3070,
742
+ "thirdPerson": 25,
743
+ "past": 15
744
+ }
745
+ },
746
+ "rules": [
747
+ {
748
+ "id": "kotlin.functions.length-p50.value",
749
+ "scope": "personal",
750
+ "language": "kotlin",
751
+ "category": "structure",
752
+ "kind": "voice",
753
+ "text": "Keep functions short. Typical length is 7 lines, 90% are under 36 lines.",
754
+ "evidence": {
755
+ "metric": {
756
+ "name": "functions.length-p50",
757
+ "value": 7,
758
+ "sampleSize": 721
759
+ },
760
+ "examples": []
761
+ },
762
+ "confidence": 0.8,
763
+ "status": "auto"
764
+ },
765
+ {
766
+ "id": "kotlin.functions.params-p90.value",
767
+ "scope": "personal",
768
+ "language": "kotlin",
769
+ "category": "structure",
770
+ "kind": "voice",
771
+ "text": "Functions take at most 3 parameters in 90% of cases.",
772
+ "evidence": {
773
+ "metric": {
774
+ "name": "functions.params-p90",
775
+ "value": 3,
776
+ "sampleSize": 1324
777
+ },
778
+ "examples": []
779
+ },
780
+ "confidence": 0.8,
781
+ "status": "auto"
782
+ },
783
+ {
784
+ "id": "kotlin.functions.nesting-p90.value",
785
+ "scope": "personal",
786
+ "language": "kotlin",
787
+ "category": "structure",
788
+ "kind": "voice",
789
+ "text": "Keep nesting shallow. 90% of functions nest at most 3 levels deep.",
790
+ "evidence": {
791
+ "metric": {
792
+ "name": "functions.nesting-p90",
793
+ "value": 3,
794
+ "sampleSize": 721
795
+ },
796
+ "examples": []
797
+ },
798
+ "confidence": 0.8,
799
+ "status": "auto"
800
+ },
801
+ {
802
+ "id": "kotlin.naming.constant-screaming-ratio.high",
803
+ "scope": "personal",
804
+ "language": "kotlin",
805
+ "category": "naming",
806
+ "kind": "voice",
807
+ "text": "Constants are SCREAMING_SNAKE_CASE.",
808
+ "evidence": {
809
+ "metric": {
810
+ "name": "naming.constant-screaming-ratio",
811
+ "value": 0.868,
812
+ "sampleSize": 38
813
+ },
814
+ "examples": []
815
+ },
816
+ "confidence": 0.73,
817
+ "status": "auto"
818
+ },
819
+ {
820
+ "id": "kotlin.naming.abbreviation-ratio.low",
821
+ "scope": "personal",
822
+ "language": "kotlin",
823
+ "category": "naming",
824
+ "kind": "voice",
825
+ "text": "Spell names out. Avoid abbreviations.",
826
+ "evidence": {
827
+ "metric": {
828
+ "name": "naming.abbreviation-ratio",
829
+ "value": 0.048,
830
+ "sampleSize": 5830
831
+ },
832
+ "examples": []
833
+ },
834
+ "confidence": 0.95,
835
+ "status": "auto"
836
+ },
837
+ {
838
+ "id": "kotlin.comments.per-100-loc.value",
839
+ "scope": "personal",
840
+ "language": "kotlin",
841
+ "category": "comments",
842
+ "kind": "voice",
843
+ "text": "Comment sparingly. About 6.5 comments per 100 lines of code.",
844
+ "evidence": {
845
+ "metric": {
846
+ "name": "comments.per-100-loc",
847
+ "value": 6.453,
848
+ "sampleSize": 25584
849
+ },
850
+ "examples": []
851
+ },
852
+ "confidence": 0.8,
853
+ "status": "auto"
854
+ },
855
+ {
856
+ "id": "kotlin.comments.doc-ratio.low",
857
+ "scope": "personal",
858
+ "language": "kotlin",
859
+ "category": "comments",
860
+ "kind": "voice",
861
+ "text": "Use short inline comments. Doc comments are rare.",
862
+ "evidence": {
863
+ "metric": {
864
+ "name": "comments.doc-ratio",
865
+ "value": 0.021,
866
+ "sampleSize": 1651
867
+ },
868
+ "examples": []
869
+ },
870
+ "confidence": 0.97,
871
+ "status": "auto"
872
+ },
873
+ {
874
+ "id": "kotlin.comments.lowercase-start-ratio.low",
875
+ "scope": "personal",
876
+ "language": "kotlin",
877
+ "category": "comments",
878
+ "kind": "voice",
879
+ "text": "Start comments with a capital letter.",
880
+ "evidence": {
881
+ "metric": {
882
+ "name": "comments.lowercase-start-ratio",
883
+ "value": 0.051,
884
+ "sampleSize": 1651
885
+ },
886
+ "examples": []
887
+ },
888
+ "confidence": 0.94,
889
+ "status": "auto"
890
+ },
891
+ {
892
+ "id": "kotlin.comments.trailing-period-ratio.low",
893
+ "scope": "personal",
894
+ "language": "kotlin",
895
+ "category": "comments",
896
+ "kind": "voice",
897
+ "text": "No trailing period on comments.",
898
+ "evidence": {
899
+ "metric": {
900
+ "name": "comments.trailing-period-ratio",
901
+ "value": 0.028,
902
+ "sampleSize": 1651
903
+ },
904
+ "examples": []
905
+ },
906
+ "confidence": 0.96,
907
+ "status": "auto"
908
+ },
909
+ {
910
+ "id": "kotlin.comments.avg-chars.value",
911
+ "scope": "personal",
912
+ "language": "kotlin",
913
+ "category": "comments",
914
+ "kind": "voice",
915
+ "text": "Comments average 53 characters.",
916
+ "evidence": {
917
+ "metric": {
918
+ "name": "comments.avg-chars",
919
+ "value": 53,
920
+ "sampleSize": 1651
921
+ },
922
+ "examples": []
923
+ },
924
+ "confidence": 0.8,
925
+ "status": "auto"
926
+ },
927
+ {
928
+ "id": "kotlin.comments.public-doc-ratio.low",
929
+ "scope": "personal",
930
+ "language": "kotlin",
931
+ "category": "comments",
932
+ "kind": "voice",
933
+ "text": "Do not add doc comments to public declarations by default. The name should carry the meaning.",
934
+ "evidence": {
935
+ "metric": {
936
+ "name": "comments.public-doc-ratio",
937
+ "value": 0.011,
938
+ "sampleSize": 2020
939
+ },
940
+ "examples": []
941
+ },
942
+ "confidence": 0.98,
943
+ "status": "auto"
944
+ },
945
+ {
946
+ "id": "kotlin.kotlin.when-ratio.high",
947
+ "scope": "personal",
948
+ "language": "kotlin",
949
+ "category": "structure",
950
+ "kind": "idiom",
951
+ "text": "Use when instead of if/else chains with three or more branches.",
952
+ "evidence": {
953
+ "metric": {
954
+ "name": "kotlin.when-ratio",
955
+ "value": 0.969,
956
+ "sampleSize": 65
957
+ },
958
+ "examples": []
959
+ },
960
+ "confidence": 0.89,
961
+ "status": "auto"
962
+ },
963
+ {
964
+ "id": "kotlin.kotlin.extension-per-kloc.value",
965
+ "scope": "personal",
966
+ "language": "kotlin",
967
+ "category": "structure",
968
+ "kind": "idiom",
969
+ "text": "Extension functions are common, about 3.6 per 1000 lines.",
970
+ "evidence": {
971
+ "metric": {
972
+ "name": "kotlin.extension-per-kloc",
973
+ "value": 3.557,
974
+ "sampleSize": 25584
975
+ },
976
+ "examples": []
977
+ },
978
+ "confidence": 0.8,
979
+ "status": "auto"
980
+ },
981
+ {
982
+ "id": "avoid.kotlin.comments.buzzwords",
983
+ "scope": "personal",
984
+ "language": "kotlin",
985
+ "category": "avoid",
986
+ "kind": "voice",
987
+ "text": "Do not use words like robust, seamless, leverage, comprehensive, utilize, streamline, crucial or delve in comments.",
988
+ "evidence": {
989
+ "metric": {
990
+ "name": "comments.buzzword-ratio",
991
+ "value": 0,
992
+ "sampleSize": 1651
993
+ },
994
+ "examples": []
995
+ },
996
+ "confidence": 1,
997
+ "status": "auto"
998
+ },
999
+ {
1000
+ "id": "avoid.kotlin.comments.restating",
1001
+ "scope": "personal",
1002
+ "language": "kotlin",
1003
+ "category": "avoid",
1004
+ "kind": "voice",
1005
+ "text": "Do not start comments with \"This function\", \"This method\" or \"This class\". Say what is not obvious from the code, or write nothing.",
1006
+ "evidence": {
1007
+ "metric": {
1008
+ "name": "comments.restates-ratio",
1009
+ "value": 0,
1010
+ "sampleSize": 1651
1011
+ },
1012
+ "examples": []
1013
+ },
1014
+ "confidence": 1,
1015
+ "status": "auto"
1016
+ },
1017
+ {
1018
+ "id": "avoid.kotlin.comments.emoji",
1019
+ "scope": "personal",
1020
+ "language": "kotlin",
1021
+ "category": "avoid",
1022
+ "kind": "voice",
1023
+ "text": "No emoji in comments.",
1024
+ "evidence": {
1025
+ "metric": {
1026
+ "name": "comments.emoji-ratio",
1027
+ "value": 0,
1028
+ "sampleSize": 1651
1029
+ },
1030
+ "examples": []
1031
+ },
1032
+ "confidence": 1,
1033
+ "status": "auto"
1034
+ },
1035
+ {
1036
+ "id": "avoid.kotlin.comments.private-docblocks",
1037
+ "scope": "personal",
1038
+ "language": "kotlin",
1039
+ "category": "avoid",
1040
+ "kind": "voice",
1041
+ "text": "Do not write doc comments on private functions and properties.",
1042
+ "evidence": {
1043
+ "metric": {
1044
+ "name": "comments.private-doc-ratio",
1045
+ "value": 0.023,
1046
+ "sampleSize": 394
1047
+ },
1048
+ "examples": []
1049
+ },
1050
+ "confidence": 0.96,
1051
+ "status": "auto"
1052
+ },
1053
+ {
1054
+ "id": "avoid.kotlin.naming.generic",
1055
+ "scope": "personal",
1056
+ "language": "kotlin",
1057
+ "category": "avoid",
1058
+ "kind": "voice",
1059
+ "text": "No generic names like handleData, processItem, result2 or helper. Name the thing after what it is.",
1060
+ "evidence": {
1061
+ "metric": {
1062
+ "name": "naming.generic-ratio",
1063
+ "value": 0,
1064
+ "sampleSize": 1222
1065
+ },
1066
+ "examples": []
1067
+ },
1068
+ "confidence": 1,
1069
+ "status": "auto"
1070
+ },
1071
+ {
1072
+ "id": "avoid.kotlin.comments.todo",
1073
+ "scope": "personal",
1074
+ "language": "kotlin",
1075
+ "category": "avoid",
1076
+ "kind": "voice",
1077
+ "text": "Do not leave TODO comments.",
1078
+ "evidence": {
1079
+ "metric": {
1080
+ "name": "comments.todo-ratio",
1081
+ "value": 0.007,
1082
+ "sampleSize": 1651
1083
+ },
1084
+ "examples": []
1085
+ },
1086
+ "confidence": 0.99,
1087
+ "status": "auto"
1088
+ },
1089
+ {
1090
+ "id": "any.commits.conventional-ratio.low",
1091
+ "scope": "personal",
1092
+ "language": "any",
1093
+ "category": "commits",
1094
+ "kind": "voice",
1095
+ "text": "No conventional commit prefixes. Plain sentences.",
1096
+ "evidence": {
1097
+ "metric": {
1098
+ "name": "commits.conventional-ratio",
1099
+ "value": 0,
1100
+ "sampleSize": 3110
1101
+ },
1102
+ "examples": []
1103
+ },
1104
+ "confidence": 1,
1105
+ "status": "auto"
1106
+ },
1107
+ {
1108
+ "id": "any.commits.lowercase-ratio.low",
1109
+ "scope": "personal",
1110
+ "language": "any",
1111
+ "category": "commits",
1112
+ "kind": "voice",
1113
+ "text": "Commit subjects start with a capital letter.",
1114
+ "evidence": {
1115
+ "metric": {
1116
+ "name": "commits.lowercase-ratio",
1117
+ "value": 0.004,
1118
+ "sampleSize": 3110
1119
+ },
1120
+ "examples": []
1121
+ },
1122
+ "confidence": 0.99,
1123
+ "status": "auto"
1124
+ },
1125
+ {
1126
+ "id": "any.commits.imperative-ratio.high",
1127
+ "scope": "personal",
1128
+ "language": "any",
1129
+ "category": "commits",
1130
+ "kind": "voice",
1131
+ "text": "Write commit subjects in the imperative: Add, Fix, Remove.",
1132
+ "evidence": {
1133
+ "metric": {
1134
+ "name": "commits.imperative-ratio",
1135
+ "value": 0.987,
1136
+ "sampleSize": 3110
1137
+ },
1138
+ "examples": []
1139
+ },
1140
+ "confidence": 0.98,
1141
+ "status": "auto"
1142
+ },
1143
+ {
1144
+ "id": "any.commits.trailing-period-ratio.low",
1145
+ "scope": "personal",
1146
+ "language": "any",
1147
+ "category": "commits",
1148
+ "kind": "voice",
1149
+ "text": "No period at the end of a commit subject.",
1150
+ "evidence": {
1151
+ "metric": {
1152
+ "name": "commits.trailing-period-ratio",
1153
+ "value": 0.001,
1154
+ "sampleSize": 3110
1155
+ },
1156
+ "examples": []
1157
+ },
1158
+ "confidence": 1,
1159
+ "status": "auto"
1160
+ },
1161
+ {
1162
+ "id": "any.commits.body-ratio.low",
1163
+ "scope": "personal",
1164
+ "language": "any",
1165
+ "category": "commits",
1166
+ "kind": "voice",
1167
+ "text": "Subject line only. Commit bodies are rare.",
1168
+ "evidence": {
1169
+ "metric": {
1170
+ "name": "commits.body-ratio",
1171
+ "value": 0.183,
1172
+ "sampleSize": 3110
1173
+ },
1174
+ "examples": []
1175
+ },
1176
+ "confidence": 0.8,
1177
+ "status": "auto"
1178
+ },
1179
+ {
1180
+ "id": "any.commits.body-wrap-ratio.high",
1181
+ "scope": "personal",
1182
+ "language": "any",
1183
+ "category": "commits",
1184
+ "kind": "voice",
1185
+ "text": "Hard-wrap commit body lines at 72 characters.",
1186
+ "evidence": {
1187
+ "metric": {
1188
+ "name": "commits.body-wrap-ratio",
1189
+ "value": 0.982,
1190
+ "sampleSize": 1556
1191
+ },
1192
+ "examples": []
1193
+ },
1194
+ "confidence": 0.97,
1195
+ "status": "auto"
1196
+ },
1197
+ {
1198
+ "id": "any.commits.subject-p50.value",
1199
+ "scope": "personal",
1200
+ "language": "any",
1201
+ "category": "commits",
1202
+ "kind": "voice",
1203
+ "text": "Commit subjects are about 34 characters.",
1204
+ "evidence": {
1205
+ "metric": {
1206
+ "name": "commits.subject-p50",
1207
+ "value": 34,
1208
+ "sampleSize": 3110
1209
+ },
1210
+ "examples": []
1211
+ },
1212
+ "confidence": 0.8,
1213
+ "status": "auto"
1214
+ },
1215
+ {
1216
+ "id": "any.commits.we-now-body",
1217
+ "scope": "personal",
1218
+ "language": "any",
1219
+ "category": "commits",
1220
+ "kind": "voice",
1221
+ "text": "When a commit needs a body, write it as one or two first-person-plural sentences stating the new behaviour and the reason: \"We now rely on normal exception handling, which feels clearer\", \"Allows us to enforce that the database is the source of truth\".",
1222
+ "evidence": {
1223
+ "examples": [
1224
+ {
1225
+ "file": "commit:7897692",
1226
+ "line": 0,
1227
+ "snippet": ""
1228
+ },
1229
+ {
1230
+ "file": "commit:64e18b7",
1231
+ "line": 0,
1232
+ "snippet": ""
1233
+ },
1234
+ {
1235
+ "file": "commit:e9f505c",
1236
+ "line": 0,
1237
+ "snippet": ""
1238
+ }
1239
+ ]
1240
+ },
1241
+ "confidence": 0.8,
1242
+ "status": "auto"
1243
+ },
1244
+ {
1245
+ "id": "any.commits.dependency-bumps",
1246
+ "scope": "personal",
1247
+ "language": "any",
1248
+ "category": "commits",
1249
+ "kind": "voice",
1250
+ "text": "Version bumps use the subject \"Update to <Lib> <version>\" or \"Bump <Lib> to <version>\"; a multi-library bump is titled \"Dependency updates\" with a body that is a bare \"- Lib\" list, one library per line.",
1251
+ "evidence": {
1252
+ "examples": [
1253
+ {
1254
+ "file": "commit:753aacc",
1255
+ "line": 0,
1256
+ "snippet": ""
1257
+ },
1258
+ {
1259
+ "file": "commit:61df0a4",
1260
+ "line": 0,
1261
+ "snippet": ""
1262
+ },
1263
+ {
1264
+ "file": "commit:c4e81a1",
1265
+ "line": 0,
1266
+ "snippet": ""
1267
+ }
1268
+ ]
1269
+ },
1270
+ "confidence": 0.9,
1271
+ "status": "auto"
1272
+ },
1273
+ {
1274
+ "id": "any.commits.tidy-up-for-now",
1275
+ "scope": "personal",
1276
+ "language": "any",
1277
+ "category": "commits",
1278
+ "kind": "voice",
1279
+ "text": "Call cleanup commits \"Tidy up <thing>\".",
1280
+ "evidence": {
1281
+ "examples": [
1282
+ {
1283
+ "file": "commit:f06b28d",
1284
+ "line": 0,
1285
+ "snippet": ""
1286
+ },
1287
+ {
1288
+ "file": "commit:3b94a64",
1289
+ "line": 0,
1290
+ "snippet": ""
1291
+ },
1292
+ {
1293
+ "file": "commit:f8971eb",
1294
+ "line": 0,
1295
+ "snippet": ""
1296
+ }
1297
+ ]
1298
+ },
1299
+ "confidence": 0.7,
1300
+ "status": "auto"
1301
+ },
1302
+ {
1303
+ "id": "kotlin.comments.we-voice-with-reason",
1304
+ "scope": "personal",
1305
+ "language": "kotlin",
1306
+ "category": "comments",
1307
+ "kind": "voice",
1308
+ "text": "Write inline comments as first-person-plural narration of the next step, with the reason attached in the same sentence by \", so\" or \", as\": \"We're not logged in, so just update the database\", \"We minus 8.dp off the grid padding, as we use content padding on the items below\".",
1309
+ "evidence": {
1310
+ "examples": [
1311
+ {
1312
+ "file": "data/followedshows/src/commonMain/kotlin/app/tivi/data/followedshows/FollowedShowsRepository.kt",
1313
+ "line": 173,
1314
+ "snippet": ""
1315
+ },
1316
+ {
1317
+ "file": "ui/upnext/src/commonMain/kotlin/app/tivi/home/upnext/UpNext.kt",
1318
+ "line": 226,
1319
+ "snippet": ""
1320
+ },
1321
+ {
1322
+ "file": "data/test/src/commonTest/kotlin/app/tivi/data/repositories/SeasonsEpisodesRepositoryTest.kt",
1323
+ "line": 72,
1324
+ "snippet": ""
1325
+ }
1326
+ ]
1327
+ },
1328
+ "confidence": 0.7,
1329
+ "status": "auto"
1330
+ },
1331
+ {
1332
+ "id": "kotlin.comments.link-bug-url",
1333
+ "scope": "personal",
1334
+ "language": "kotlin",
1335
+ "category": "comments",
1336
+ "kind": "voice",
1337
+ "text": "When code works around an external bug or follows a specific doc, end the comment with the bare URL, optionally after \"See:\", as in \"See: https://issuetracker.google.com/issues/256100927\". Do not paraphrase the issue beyond one line.",
1338
+ "evidence": {
1339
+ "examples": [
1340
+ {
1341
+ "file": "ui/recommended/src/commonMain/kotlin/app/tivi/home/recommended/Recommended.kt",
1342
+ "line": 30,
1343
+ "snippet": ""
1344
+ },
1345
+ {
1346
+ "file": "ui/account/src/commonMain/kotlin/app/tivi/account/AccountUi.kt",
1347
+ "line": 70,
1348
+ "snippet": ""
1349
+ },
1350
+ {
1351
+ "file": "gradle/build-logic/convention/src/main/kotlin/app/tivi/gradle/KotlinMultiplatformConventionPlugin.kt",
1352
+ "line": 63,
1353
+ "snippet": ""
1354
+ }
1355
+ ]
1356
+ },
1357
+ "confidence": 0.8,
1358
+ "status": "auto"
1359
+ },
1360
+ {
1361
+ "id": "kotlin.comments.section-labels",
1362
+ "scope": "personal",
1363
+ "language": "kotlin",
1364
+ "category": "comments",
1365
+ "kind": "voice",
1366
+ "text": "To split a long class or test into regions, use a terse noun-phrase comment as a label, such as \"// Trakt specific stuff\" or \"// Episode details\", not a doc block or banner.",
1367
+ "evidence": {
1368
+ "examples": [
1369
+ {
1370
+ "file": "data/episodes/src/commonMain/kotlin/app/tivi/data/episodes/SeasonsEpisodesRepository.kt",
1371
+ "line": 432,
1372
+ "snippet": ""
1373
+ },
1374
+ {
1375
+ "file": "data/episodes/src/commonMain/kotlin/app/tivi/data/episodes/SeasonsEpisodesRepository.kt",
1376
+ "line": 437,
1377
+ "snippet": ""
1378
+ },
1379
+ {
1380
+ "file": "android-app/common-test/src/main/kotlin/app/tivi/app/test/AppScenarios.kt",
1381
+ "line": 40,
1382
+ "snippet": ""
1383
+ }
1384
+ ]
1385
+ },
1386
+ "confidence": 0.6,
1387
+ "status": "auto"
1388
+ },
1389
+ {
1390
+ "id": "kotlin.structure.block-body-return",
1391
+ "scope": "personal",
1392
+ "language": "kotlin",
1393
+ "category": "structure",
1394
+ "kind": "idiom",
1395
+ "text": "Write single-call functions as a block body with an explicit `return`, even when they are one line (`return db.showQueries.getShowWithId(id, ::TiviShow)...`). Reserve `= ...` expression bodies for functions whose whole body is a `when` or a Modifier/layout expression.",
1396
+ "evidence": {
1397
+ "examples": [
1398
+ {
1399
+ "file": "data/db-sqldelight/src/commonMain/kotlin/app/tivi/data/daos/SqlDelightTiviShowDao.kt",
1400
+ "line": 37,
1401
+ "snippet": ""
1402
+ },
1403
+ {
1404
+ "file": "data/legacy/src/commonMain/kotlin/app/tivi/data/lastrequests/EntityLastRequestStore.kt",
1405
+ "line": 17,
1406
+ "snippet": ""
1407
+ },
1408
+ {
1409
+ "file": "ui/root/src/commonMain/kotlin/app/tivi/home/Home.kt",
1410
+ "line": 250,
1411
+ "snippet": ""
1412
+ }
1413
+ ]
1414
+ },
1415
+ "confidence": 0.7,
1416
+ "status": "auto"
1417
+ },
1418
+ {
1419
+ "id": "kotlin.framework.compose-param-order",
1420
+ "scope": "personal",
1421
+ "language": "kotlin",
1422
+ "category": "framework",
1423
+ "kind": "idiom",
1424
+ "text": "Order composable parameters as: required data and callbacks, then `modifier: Modifier = Modifier`, then optional styling defaults, with the `@Composable` slot lambda (`content`, `icon`) last. Pass every argument to a composable by name with a trailing comma, and break Modifier chains one call per line.",
1425
+ "evidence": {
1426
+ "examples": [
1427
+ {
1428
+ "file": "common/ui/compose/src/commonMain/kotlin/app/tivi/common/compose/ui/LoadingButton.kt",
1429
+ "line": 24,
1430
+ "snippet": ""
1431
+ },
1432
+ {
1433
+ "file": "common/ui/compose/src/commonMain/kotlin/app/tivi/common/compose/ui/IconButtonScrim.kt",
1434
+ "line": 19,
1435
+ "snippet": ""
1436
+ },
1437
+ {
1438
+ "file": "common/ui/compose/src/commonMain/kotlin/app/tivi/common/compose/ui/Preference.kt",
1439
+ "line": 53,
1440
+ "snippet": ""
1441
+ }
1442
+ ]
1443
+ },
1444
+ "confidence": 0.9,
1445
+ "status": "auto"
1446
+ },
1447
+ {
1448
+ "id": "kotlin.naming.lookup-with-for",
1449
+ "scope": "personal",
1450
+ "language": "kotlin",
1451
+ "category": "naming",
1452
+ "kind": "voice",
1453
+ "text": "Name query functions after what they return followed by the lookup key joined with `With` or `For`, no `get` prefix: `episodeWithId`, `entryCountWithShowId`, `episodeTraktIdForId`, `entriesWithDeletePendingActions`.",
1454
+ "evidence": {
1455
+ "examples": [
1456
+ {
1457
+ "file": "data/db-sqldelight/src/commonMain/kotlin/app/tivi/data/daos/SqlDelightFollowedShowsDao.kt",
1458
+ "line": 63,
1459
+ "snippet": ""
1460
+ },
1461
+ {
1462
+ "file": "data/episodes/src/commonMain/kotlin/app/tivi/data/episodes/SeasonsEpisodesRepository.kt",
1463
+ "line": 76,
1464
+ "snippet": ""
1465
+ },
1466
+ {
1467
+ "file": "data/legacy/src/commonMain/kotlin/app/tivi/data/mappers/EpisodeIdToTraktIdMapper.kt",
1468
+ "line": 13,
1469
+ "snippet": ""
1470
+ }
1471
+ ]
1472
+ },
1473
+ "confidence": 0.7,
1474
+ "status": "auto"
1475
+ },
1476
+ {
1477
+ "id": "kotlin.naming.boolean-verb-params",
1478
+ "scope": "personal",
1479
+ "language": "kotlin",
1480
+ "category": "naming",
1481
+ "kind": "voice",
1482
+ "text": "Name boolean UI parameters as imperative verb phrases describing the effect, not is/has: `showProgressIndicator`, `showScrim`, `invertThemeOnScrim`.",
1483
+ "evidence": {
1484
+ "examples": [
1485
+ {
1486
+ "file": "common/ui/compose/src/commonMain/kotlin/app/tivi/common/compose/ui/LoadingButton.kt",
1487
+ "line": 24,
1488
+ "snippet": ""
1489
+ },
1490
+ {
1491
+ "file": "common/ui/compose/src/commonMain/kotlin/app/tivi/common/compose/ui/IconButtonScrim.kt",
1492
+ "line": 19,
1493
+ "snippet": ""
1494
+ },
1495
+ {
1496
+ "file": "common/ui/compose/src/commonMain/kotlin/app/tivi/common/compose/ui/IconButtonScrim.kt",
1497
+ "line": 47,
1498
+ "snippet": ""
1499
+ }
1500
+ ]
1501
+ },
1502
+ "confidence": 0.7,
1503
+ "status": "auto"
1504
+ }
1505
+ ]
1506
+ }