thailint 0.15.8__py3-none-any.whl → 0.17.0__py3-none-any.whl
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.
- src/cli/config.py +4 -12
- src/cli/linters/__init__.py +13 -3
- src/cli/linters/code_patterns.py +42 -38
- src/cli/linters/code_smells.py +8 -17
- src/cli/linters/documentation.py +3 -6
- src/cli/linters/performance.py +4 -10
- src/cli/linters/rust.py +177 -0
- src/cli/linters/shared.py +2 -7
- src/cli/linters/structure.py +4 -11
- src/cli/linters/structure_quality.py +4 -11
- src/cli/main.py +9 -12
- src/cli/utils.py +7 -16
- src/core/__init__.py +14 -0
- src/core/base.py +30 -0
- src/core/constants.py +1 -0
- src/core/linter_utils.py +42 -1
- src/core/rule_aliases.py +84 -0
- src/linter_config/rule_matcher.py +53 -8
- src/linters/blocking_async/__init__.py +31 -0
- src/linters/blocking_async/config.py +67 -0
- src/linters/blocking_async/linter.py +183 -0
- src/linters/blocking_async/rust_analyzer.py +419 -0
- src/linters/blocking_async/violation_builder.py +97 -0
- src/linters/clone_abuse/__init__.py +31 -0
- src/linters/clone_abuse/config.py +65 -0
- src/linters/clone_abuse/linter.py +183 -0
- src/linters/clone_abuse/rust_analyzer.py +356 -0
- src/linters/clone_abuse/violation_builder.py +94 -0
- src/linters/magic_numbers/linter.py +92 -0
- src/linters/magic_numbers/rust_analyzer.py +148 -0
- src/linters/magic_numbers/violation_builder.py +31 -0
- src/linters/nesting/linter.py +50 -0
- src/linters/nesting/rust_analyzer.py +118 -0
- src/linters/nesting/violation_builder.py +32 -0
- src/linters/print_statements/__init__.py +23 -11
- src/linters/print_statements/conditional_verbose_analyzer.py +200 -0
- src/linters/print_statements/conditional_verbose_rule.py +254 -0
- src/linters/print_statements/linter.py +2 -2
- src/linters/srp/class_analyzer.py +49 -0
- src/linters/srp/linter.py +22 -0
- src/linters/srp/rust_analyzer.py +206 -0
- src/linters/unwrap_abuse/__init__.py +30 -0
- src/linters/unwrap_abuse/config.py +59 -0
- src/linters/unwrap_abuse/linter.py +166 -0
- src/linters/unwrap_abuse/rust_analyzer.py +118 -0
- src/linters/unwrap_abuse/violation_builder.py +89 -0
- src/templates/thailint_config_template.yaml +88 -0
- {thailint-0.15.8.dist-info → thailint-0.17.0.dist-info}/METADATA +7 -3
- {thailint-0.15.8.dist-info → thailint-0.17.0.dist-info}/RECORD +52 -30
- {thailint-0.15.8.dist-info → thailint-0.17.0.dist-info}/WHEEL +0 -0
- {thailint-0.15.8.dist-info → thailint-0.17.0.dist-info}/entry_points.txt +0 -0
- {thailint-0.15.8.dist-info → thailint-0.17.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -328,6 +328,94 @@ performance:
|
|
|
328
328
|
# - "tests/**"
|
|
329
329
|
# - "scripts/**"
|
|
330
330
|
|
|
331
|
+
# ============================================================================
|
|
332
|
+
# UNWRAP ABUSE LINTER (Rust)
|
|
333
|
+
# ============================================================================
|
|
334
|
+
# Detects .unwrap() and .expect() calls in Rust code that may panic at runtime
|
|
335
|
+
# Suggests safer alternatives like ?, unwrap_or(), unwrap_or_default()
|
|
336
|
+
#
|
|
337
|
+
unwrap-abuse:
|
|
338
|
+
enabled: true
|
|
339
|
+
|
|
340
|
+
# Allow .unwrap()/.expect() in #[test] functions and #[cfg(test)] modules
|
|
341
|
+
# Default: true
|
|
342
|
+
allow_in_tests: true
|
|
343
|
+
|
|
344
|
+
# Allow .expect() calls (they provide error context unlike bare .unwrap())
|
|
345
|
+
# Default: false
|
|
346
|
+
allow_expect: false
|
|
347
|
+
|
|
348
|
+
# -------------------------------------------------------------------------
|
|
349
|
+
# OPTIONAL: File patterns to ignore
|
|
350
|
+
# -------------------------------------------------------------------------
|
|
351
|
+
# ignore:
|
|
352
|
+
# - "examples/"
|
|
353
|
+
# - "benches/"
|
|
354
|
+
|
|
355
|
+
# ============================================================================
|
|
356
|
+
# CLONE ABUSE LINTER (Rust)
|
|
357
|
+
# ============================================================================
|
|
358
|
+
# Detects .clone() abuse patterns in Rust code: clone in loops, chained clones,
|
|
359
|
+
# and unnecessary clones where the original is not used after cloning
|
|
360
|
+
#
|
|
361
|
+
clone-abuse:
|
|
362
|
+
enabled: true
|
|
363
|
+
|
|
364
|
+
# Allow .clone() in #[test] functions and #[cfg(test)] modules
|
|
365
|
+
# Default: true
|
|
366
|
+
allow_in_tests: true
|
|
367
|
+
|
|
368
|
+
# Toggle detection of .clone() inside loop bodies (for, while, loop)
|
|
369
|
+
# Default: true
|
|
370
|
+
detect_clone_in_loop: true
|
|
371
|
+
|
|
372
|
+
# Toggle detection of chained .clone().clone() calls
|
|
373
|
+
# Default: true
|
|
374
|
+
detect_clone_chain: true
|
|
375
|
+
|
|
376
|
+
# Toggle detection of unnecessary clones (clone before move)
|
|
377
|
+
# Default: true
|
|
378
|
+
detect_unnecessary_clone: true
|
|
379
|
+
|
|
380
|
+
# -------------------------------------------------------------------------
|
|
381
|
+
# OPTIONAL: File patterns to ignore
|
|
382
|
+
# -------------------------------------------------------------------------
|
|
383
|
+
# ignore:
|
|
384
|
+
# - "examples/"
|
|
385
|
+
# - "benches/"
|
|
386
|
+
|
|
387
|
+
# ============================================================================
|
|
388
|
+
# BLOCKING ASYNC LINTER (Rust)
|
|
389
|
+
# ============================================================================
|
|
390
|
+
# Detects blocking operations inside async functions in Rust code:
|
|
391
|
+
# std::fs I/O, std::thread::sleep, and blocking std::net calls
|
|
392
|
+
#
|
|
393
|
+
blocking-async:
|
|
394
|
+
enabled: true
|
|
395
|
+
|
|
396
|
+
# Allow blocking calls in #[test] functions and #[cfg(test)] modules
|
|
397
|
+
# Default: true
|
|
398
|
+
allow_in_tests: true
|
|
399
|
+
|
|
400
|
+
# Toggle detection of std::fs operations in async functions
|
|
401
|
+
# Default: true
|
|
402
|
+
detect_fs_in_async: true
|
|
403
|
+
|
|
404
|
+
# Toggle detection of std::thread::sleep in async functions
|
|
405
|
+
# Default: true
|
|
406
|
+
detect_sleep_in_async: true
|
|
407
|
+
|
|
408
|
+
# Toggle detection of std::net blocking calls in async functions
|
|
409
|
+
# Default: true
|
|
410
|
+
detect_net_in_async: true
|
|
411
|
+
|
|
412
|
+
# -------------------------------------------------------------------------
|
|
413
|
+
# OPTIONAL: File patterns to ignore
|
|
414
|
+
# -------------------------------------------------------------------------
|
|
415
|
+
# ignore:
|
|
416
|
+
# - "examples/"
|
|
417
|
+
# - "benches/"
|
|
418
|
+
|
|
331
419
|
# ============================================================================
|
|
332
420
|
# GLOBAL SETTINGS
|
|
333
421
|
# ============================================================================
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: thailint
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.17.0
|
|
4
4
|
Summary: The AI Linter - Enterprise-grade linting and governance for AI-generated code across multiple languages
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -24,6 +24,7 @@ Classifier: Topic :: Software Development :: Testing
|
|
|
24
24
|
Classifier: Topic :: Utilities
|
|
25
25
|
Classifier: Typing :: Typed
|
|
26
26
|
Requires-Dist: click (>=8.1.0,<9.0.0)
|
|
27
|
+
Requires-Dist: loguru (>=0.7.3,<0.8.0)
|
|
27
28
|
Requires-Dist: pyprojroot (>=0.3.0,<0.4.0)
|
|
28
29
|
Requires-Dist: pyyaml (>=6.0,<7.0)
|
|
29
30
|
Requires-Dist: tree-sitter (>=0.25.2,<0.26.0)
|
|
@@ -43,7 +44,7 @@ Description-Content-Type: text/markdown
|
|
|
43
44
|
|
|
44
45
|
**The AI Linter** - Catch the mistakes AI coding assistants keep making.
|
|
45
46
|
|
|
46
|
-
thailint detects anti-patterns that AI tools frequently introduce: duplicate code, excessive nesting, magic numbers, SRP violations, and more. It works across Python, TypeScript, and
|
|
47
|
+
thailint detects anti-patterns that AI tools frequently introduce: duplicate code, excessive nesting, magic numbers, SRP violations, and more. It works across Python, TypeScript, JavaScript, and Rust with unified rules - filling gaps that existing linters miss.
|
|
47
48
|
|
|
48
49
|
## Installation
|
|
49
50
|
|
|
@@ -83,9 +84,12 @@ That's it. See violations, fix them, ship better code.
|
|
|
83
84
|
| **Method Property** | Methods that should be @property | `thailint method-property src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/method-property-linter/) |
|
|
84
85
|
| **File Placement** | Files in wrong directories | `thailint file-placement src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/file-placement-linter/) |
|
|
85
86
|
| **Lazy Ignores** | Unjustified linting suppressions | `thailint lazy-ignores src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/lazy-ignores-linter/) |
|
|
86
|
-
| **
|
|
87
|
+
| **Improper Logging** | Print statements and conditional verbose patterns | `thailint improper-logging src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/improper-logging-linter/) |
|
|
87
88
|
| **Stringly Typed** | Strings that should be enums | `thailint stringly-typed src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/stringly-typed-linter/) |
|
|
88
89
|
| **LBYL** | Look Before You Leap anti-patterns | `thailint lbyl src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/lbyl-linter/) |
|
|
90
|
+
| **Unwrap Abuse** | `.unwrap()`/`.expect()` that panic at runtime (Rust) | `thailint unwrap-abuse src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/unwrap-abuse-linter/) |
|
|
91
|
+
| **Clone Abuse** | `.clone()` abuse: loops, chains, unnecessary (Rust) | `thailint clone-abuse src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/clone-abuse-linter/) |
|
|
92
|
+
| **Blocking Async** | Blocking std:: calls in async functions (Rust) | `thailint blocking-async src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/blocking-async-linter/) |
|
|
89
93
|
|
|
90
94
|
## Configuration
|
|
91
95
|
|
|
@@ -7,28 +7,30 @@ src/analyzers/typescript_base.py,sha256=Dtc_2jLSNoadh53MyeW2syrJMBIMVPvotcM8SeDE
|
|
|
7
7
|
src/api.py,sha256=pJ5l3qxccKBEY-BkANwzTgLAl1ZFq7OP6hx6LSxbhDw,4664
|
|
8
8
|
src/cli/__init__.py,sha256=nMxKv4D0t09LwUm4Z5w-b7vIuyn24SFzv78BKzE3AOQ,1272
|
|
9
9
|
src/cli/__main__.py,sha256=xIKI57yqB1NOw9eXnGXfU8rC2UwcAJYjDxlZbt9eP0w,671
|
|
10
|
-
src/cli/config.py,sha256=
|
|
10
|
+
src/cli/config.py,sha256=uAcc1NMe4uvC5619wyGIrSJtOWeOWT3No8_qBvowqXk,14293
|
|
11
11
|
src/cli/config_merge.py,sha256=A1eCthiLwjj0SEhOcxa6t2hYwWMapGJpL9sCmYvUFw4,8464
|
|
12
|
-
src/cli/linters/__init__.py,sha256=
|
|
13
|
-
src/cli/linters/code_patterns.py,sha256=
|
|
14
|
-
src/cli/linters/code_smells.py,sha256=
|
|
15
|
-
src/cli/linters/documentation.py,sha256=
|
|
16
|
-
src/cli/linters/performance.py,sha256=
|
|
17
|
-
src/cli/linters/
|
|
18
|
-
src/cli/linters/
|
|
19
|
-
src/cli/linters/
|
|
20
|
-
src/cli/
|
|
21
|
-
src/cli/
|
|
12
|
+
src/cli/linters/__init__.py,sha256=7Kk209UZlbFBBhtr89NH827P-mP4F6KnHsT1-2tmbCo,2714
|
|
13
|
+
src/cli/linters/code_patterns.py,sha256=0ajlHI9kesHryBjF_YBHltMi2gjkPPacMxYoJ1h0Qck,11463
|
|
14
|
+
src/cli/linters/code_smells.py,sha256=9J_CPdCFDv6fHQwfLP01PgBnF1c8DwioeIICLA-N7Zo,11608
|
|
15
|
+
src/cli/linters/documentation.py,sha256=bvrW4OfgeKOYlzzHv3Zl-XjGjItviX_zLlP94btlUkI,3211
|
|
16
|
+
src/cli/linters/performance.py,sha256=TZoe8hs-5j68tUiiKRwnhdGEKm432QlmwAG4eAqgcVo,9747
|
|
17
|
+
src/cli/linters/rust.py,sha256=ePfPb5sR58sroBn70i17-NtugifWdvyWTEQpDumbo5E,7447
|
|
18
|
+
src/cli/linters/shared.py,sha256=dC8SS8UxJR3WvQr1SkWJAf-AZalN-u-eDrM-FXmKqtw,10043
|
|
19
|
+
src/cli/linters/structure.py,sha256=4SxM2ekq2OPDQfEXxKuQAEn7pqt6cGrLgHLqZ4S57eQ,10636
|
|
20
|
+
src/cli/linters/structure_quality.py,sha256=5cCPz9Jmtvzr3hZZjac3aVFmUIH7HLlkshv_rvs12xI,10627
|
|
21
|
+
src/cli/main.py,sha256=VUtesVpLXeRP9fb2Ko_imGeUybO7JhImsJnHYxQTIN4,3852
|
|
22
|
+
src/cli/utils.py,sha256=5IYu9KltZEg76wgbW-qfKwcXzCK3qsEuvgnr4i_UkqY,12437
|
|
22
23
|
src/cli_main.py,sha256=C0Ey7YNlG3ipqb3KsJZ8rL8PJ4ueVp_45IUirGidvHI,1618
|
|
23
24
|
src/config.py,sha256=O3ixzsYekGjlggmIsawCU1bctOa0MyG2IczHpg3mGyw,12753
|
|
24
|
-
src/core/__init__.py,sha256=
|
|
25
|
-
src/core/base.py,sha256=
|
|
25
|
+
src/core/__init__.py,sha256=1iGdoUB15Hi7xT7jwxUybP3e5IbQ6yiM34IbFNJRCaE,703
|
|
26
|
+
src/core/base.py,sha256=H_eomk-V4ZK4N2H0x8nx75C7tdsZIsPL8TpSl6EW4oo,9019
|
|
26
27
|
src/core/cli_utils.py,sha256=o7lWPSlic96lRyfcsmBf8S1ej25M1-wlclx8_Eup20g,7446
|
|
27
28
|
src/core/config_parser.py,sha256=CRHV2-csxag6yQzx_4IYYz57QSUYjPkeSb0XvOyshRI,4272
|
|
28
|
-
src/core/constants.py,sha256=
|
|
29
|
-
src/core/linter_utils.py,sha256=
|
|
29
|
+
src/core/constants.py,sha256=2RGlojy0z0_SLhU9bbLtXpl6DM6JMtcW3wNfoMCyXj4,1602
|
|
30
|
+
src/core/linter_utils.py,sha256=HJ4SBCCqx7WgdLaFt35qj-nGSG_vTWV5kVyom4Bv9nU,9714
|
|
30
31
|
src/core/python_lint_rule.py,sha256=OpdIDLPV1MDtmjy6GPrrOA3_rRV2_x14keHAQQtI_pc,3516
|
|
31
32
|
src/core/registry.py,sha256=yRA8mQLiZwjmgxl1wSTgdj1cuo_QXuRdrXt3NpCBUgE,3285
|
|
33
|
+
src/core/rule_aliases.py,sha256=EEPrI2syrK18Zg1oHZBMNiU1Z-zIdORJjXTAN738h1A,2570
|
|
32
34
|
src/core/rule_discovery.py,sha256=tgRH-BJGKsQTxfa249yrY7UJuonRjobMCENqmhcbAeY,5496
|
|
33
35
|
src/core/types.py,sha256=SElFzf_VSrAMsoiE0aU8ZYXuvKqdfwfM5umUHx4eT8w,3342
|
|
34
36
|
src/core/violation_builder.py,sha256=dOPFfZx6U5_TMgaTop-4SUV2jHOZjBo67uwgiS_s-uE,6694
|
|
@@ -40,8 +42,18 @@ src/linter_config/directive_markers.py,sha256=nRc2Mp3B1mn6tu1XH88ugMxWffk1k8OUNo
|
|
|
40
42
|
src/linter_config/ignore.py,sha256=40afiMsu1zC29RiwGX8hUPUqM056H_wcOgZZUNOwIes,13111
|
|
41
43
|
src/linter_config/loader.py,sha256=K6mKRkP2jgwar-pwBoJGWgwynLVjqdez-l3Nd6bUCMk,3363
|
|
42
44
|
src/linter_config/pattern_utils.py,sha256=BjV95SySST3HqZBwF1Og8yoHqFxuqQ16VPCacE21ks0,2056
|
|
43
|
-
src/linter_config/rule_matcher.py,sha256=
|
|
45
|
+
src/linter_config/rule_matcher.py,sha256=5q-cO9S2JbIB3Hr1BU4yAPmbS89eE7y7leiMfaMCKVk,4555
|
|
44
46
|
src/linters/__init__.py,sha256=-nnNsL8E5-2p9qlLKp_TaShHAjPH-NacOEU1sXmAR9k,77
|
|
47
|
+
src/linters/blocking_async/__init__.py,sha256=nO9brw2svlDkKez3LjfesweZ_ytL01ea-W6b1P3uWY0,1303
|
|
48
|
+
src/linters/blocking_async/config.py,sha256=0b7XIQlVMYPOmFG3alWQLo5qyoUVlmiiTB1bYNGLgEI,2474
|
|
49
|
+
src/linters/blocking_async/linter.py,sha256=17vJXy0zPq5XLtLb1dSv4eboFVDH75b7NwDvpgtGmbw,6117
|
|
50
|
+
src/linters/blocking_async/rust_analyzer.py,sha256=oDm6vcTpU2mT4MaaBpQn6wD8u8Q01ryRw2OL1VAl_v4,12749
|
|
51
|
+
src/linters/blocking_async/violation_builder.py,sha256=DA9mIyWBLor_vMBCCc6xrGu8RPkJrZrQyZPT-UdhiC8,3188
|
|
52
|
+
src/linters/clone_abuse/__init__.py,sha256=lkNBqe_fW7cf5_n-iuH_p-covCtWD_MfcyW-r7dbzQo,1214
|
|
53
|
+
src/linters/clone_abuse/config.py,sha256=_QkaVtyXBPVkY2JV1nu3x3gfAKDzw4IRv1tezdYsrF4,2382
|
|
54
|
+
src/linters/clone_abuse/linter.py,sha256=GoCYc_UhwSl7mR5z5JAo94229SkD9M7CD9tO5WZvbMU,5901
|
|
55
|
+
src/linters/clone_abuse/rust_analyzer.py,sha256=L9TCRvISf2_ccCJc7pcvRg_eETPWhlU7cpNp2Z2XSiE,11434
|
|
56
|
+
src/linters/clone_abuse/violation_builder.py,sha256=DV5KI1crvMqhPpMa-kT0dNbD25mp2L169atTFTddDfk,2980
|
|
45
57
|
src/linters/collection_pipeline/__init__.py,sha256=BcnbY3wgJB1XLfZ9J9qfUJQ1_yCo_THjGDTppxJEMZY,3231
|
|
46
58
|
src/linters/collection_pipeline/any_all_analyzer.py,sha256=u8NGIYrJTuP3U6je5rkeEUV2Bh1yePC12vl-czAU5GU,7554
|
|
47
59
|
src/linters/collection_pipeline/ast_utils.py,sha256=JZsJeel9BzVIOfnENgVcZR8wMNoQ-RJoxuBx-J7w9Uk,1227
|
|
@@ -144,11 +156,12 @@ src/linters/magic_numbers/__init__.py,sha256=17dkCUf0uiYLvpOZF01VDojj92NzxXZMtRh
|
|
|
144
156
|
src/linters/magic_numbers/config.py,sha256=l18AO6XY6zkrX6_aumn3CZLpCsw185sfy5B_v2nY-OA,4233
|
|
145
157
|
src/linters/magic_numbers/context_analyzer.py,sha256=EgDyxxjvEqyD3FX0Fnxj5RcOPyvyVs_rYFxj2HOxYdg,7309
|
|
146
158
|
src/linters/magic_numbers/definition_detector.py,sha256=brENrT17ofYzZUpFjAq05DeG4DS2pKdWAWm4DyGTrDY,6156
|
|
147
|
-
src/linters/magic_numbers/linter.py,sha256=
|
|
159
|
+
src/linters/magic_numbers/linter.py,sha256=ML-DOeBShEXwt0VUVHr6uwS8ssJ2FhR7BGkJQ8q8Hu8,19984
|
|
148
160
|
src/linters/magic_numbers/python_analyzer.py,sha256=Ba-EODvAkUIOhqMFv86MxMlXqF20ngvgubiWN_U_IUk,2446
|
|
161
|
+
src/linters/magic_numbers/rust_analyzer.py,sha256=WTQ6NICZRoC48pITaS2OjKIt41BWSTahh9OFb0_G-SM,4934
|
|
149
162
|
src/linters/magic_numbers/typescript_analyzer.py,sha256=-2YPmNWXHJN8R2siV3pJk_3Baj-A9nnvQRpU35YBKgs,7519
|
|
150
163
|
src/linters/magic_numbers/typescript_ignore_checker.py,sha256=9JWqtXd8KU_GCc_66KSZT2X7uQhNGpxE2ikOyjcLyao,2847
|
|
151
|
-
src/linters/magic_numbers/violation_builder.py,sha256=
|
|
164
|
+
src/linters/magic_numbers/violation_builder.py,sha256=ao366b7KiVthWTBzdQlBiCk-5hXjXVqgrsG3KTE-xhs,4188
|
|
152
165
|
src/linters/method_property/__init__.py,sha256=t0C6zD5WLm-McgmvVajQJg4HQfOi7_4YzNLhKNA484w,1415
|
|
153
166
|
src/linters/method_property/config.py,sha256=_TbUc0piC1FeW3qsw4hYryzWPUOq_laia_QNLe1Y0aw,5529
|
|
154
167
|
src/linters/method_property/linter.py,sha256=9pgUEIK7ASZVwtsRVOg3U0k-GR0lHSLpUv_1TnIcZPA,12700
|
|
@@ -156,11 +169,12 @@ src/linters/method_property/python_analyzer.py,sha256=uyNUJHxACw01Z1Uz6lRUPe753M
|
|
|
156
169
|
src/linters/method_property/violation_builder.py,sha256=A7SwZWlVG_7W5pJiHOvIroI2q4UuOQNryOYvmX3APLs,4251
|
|
157
170
|
src/linters/nesting/__init__.py,sha256=tszmyCEQMpEwB5H84WcAUfRYDQl7jpsn04es5DtAHsM,3200
|
|
158
171
|
src/linters/nesting/config.py,sha256=PfPA2wJn3i6HHXeM0qu6Qx-v1KJdRwlRkFOdpf7NhS8,2405
|
|
159
|
-
src/linters/nesting/linter.py,sha256=
|
|
172
|
+
src/linters/nesting/linter.py,sha256=ybNcwIYFGHnvXlMUrgSs0NVtno_L0F7R1OLkOpDc0rc,8491
|
|
160
173
|
src/linters/nesting/python_analyzer.py,sha256=ZaZuFErwpyEG3G0O5LqYwWn7Kmae9mqB8GCSRHSkjmU,5344
|
|
174
|
+
src/linters/nesting/rust_analyzer.py,sha256=fDGNlNioTF02Q5M2DaCzF-78ztKjUjPCjTR07uCu0kQ,3917
|
|
161
175
|
src/linters/nesting/typescript_analyzer.py,sha256=70TsjP3EJWiHJ1ncMaveFE0e9_HdukWZr9LM0_MDXr8,3639
|
|
162
176
|
src/linters/nesting/typescript_function_extractor.py,sha256=dDB1otJnFMCo-Pj4mTr4gekKe7V4ArOAtX6gV0dBDc4,4494
|
|
163
|
-
src/linters/nesting/violation_builder.py,sha256=
|
|
177
|
+
src/linters/nesting/violation_builder.py,sha256=mKEv52D9an5-mw1-sNlkECn0MaEdLNyIYX-6sGI0u5Y,5912
|
|
164
178
|
src/linters/performance/__init__.py,sha256=UXJwfTk2ZCBqdy0Rtqcn2rMffWXXauq14oNMPtJDO3o,3118
|
|
165
179
|
src/linters/performance/config.py,sha256=TmOdKtbrYx8POzFx_7fkgWfHcri2oBIXsm4V9FqkAek,1458
|
|
166
180
|
src/linters/performance/constants.py,sha256=WBiSCOMGNd01o5D0M95Lyx_liZAd3zBkIPu7ZXzcW3M,1127
|
|
@@ -170,19 +184,22 @@ src/linters/performance/regex_analyzer.py,sha256=GZKf3jWWH28TxGlTqDeyd97JDbxjIT1
|
|
|
170
184
|
src/linters/performance/regex_linter.py,sha256=velv84oQ3TxP9cJlYmSts3_DjS1h-RINuZDmQx-YatU,5078
|
|
171
185
|
src/linters/performance/typescript_analyzer.py,sha256=t0jvLvVG97ffgC-4KhXobKa9iG9iGREOV5Kta7XsbFw,8740
|
|
172
186
|
src/linters/performance/violation_builder.py,sha256=q4fy3SVVrveyYYg9O2-MZfWjlHlKRP3llH1-8VQ6sUU,5752
|
|
173
|
-
src/linters/print_statements/__init__.py,sha256=
|
|
187
|
+
src/linters/print_statements/__init__.py,sha256=xvqQOc3Lp_YAJChFQh-DnX9KCkj4hksRBFFE_7i5nKA,2268
|
|
188
|
+
src/linters/print_statements/conditional_verbose_analyzer.py,sha256=qhspk0WAC3zGBVGsLFogtbyQrVnb6doLnXhcgbZFdFc,6475
|
|
189
|
+
src/linters/print_statements/conditional_verbose_rule.py,sha256=uGsKXDbuHBTHfFj3ScqK1xh-BvAJ7TrJhWgpHHthLoE,9290
|
|
174
190
|
src/linters/print_statements/config.py,sha256=rth3XmzqZGzXkRXDIVZswdtNOXIe1vIRaF46tVLKnyQ,3041
|
|
175
|
-
src/linters/print_statements/linter.py,sha256=
|
|
191
|
+
src/linters/print_statements/linter.py,sha256=er--FN_uu6C3wxxUti13-wG1GkjeVU0Mx_2uHGGFxcc,14376
|
|
176
192
|
src/linters/print_statements/python_analyzer.py,sha256=48IDRQEv861B90qCl5w8ASxcXR7juZ429YX2ST9n2ic,5028
|
|
177
193
|
src/linters/print_statements/typescript_analyzer.py,sha256=EFE3bjRENvCPEYmNNxZ4jiq1VCA-rEUAJ_VFWJApLqY,4935
|
|
178
194
|
src/linters/print_statements/violation_builder.py,sha256=Vs5m3AnWjrQqQHf6JJDaPP5B1V3YNl5pepG_oiTJnx4,3333
|
|
179
195
|
src/linters/srp/__init__.py,sha256=GbhaSB2_AYY-mWgG_ThbyAcDXoVZuB5eLzguoShf38w,3367
|
|
180
|
-
src/linters/srp/class_analyzer.py,sha256=
|
|
196
|
+
src/linters/srp/class_analyzer.py,sha256=7qYxjGT3zDyVNmW9ide-w6iVBLeIyFVhQK4rLQNth_8,5820
|
|
181
197
|
src/linters/srp/config.py,sha256=hTxrM21HIOmg0sM6eJ_h3hRnuxqRZEgs13Ie97-PDr4,3397
|
|
182
198
|
src/linters/srp/heuristics.py,sha256=hMWRdTJoIY-T0s7ruB6ju27RPBJCATMiUvLZXzQvTsY,4229
|
|
183
|
-
src/linters/srp/linter.py,sha256=
|
|
199
|
+
src/linters/srp/linter.py,sha256=t0QuSrmQDxoKPDLPFk9ezbk5oY2Z-5TfVNT5VeipUp0,8512
|
|
184
200
|
src/linters/srp/metrics_evaluator.py,sha256=Prk_dPacas_dX7spAzV0g734srmzT5u0t5d4mTG9g2o,1606
|
|
185
201
|
src/linters/srp/python_analyzer.py,sha256=PH27l38BFPNmj22Z10QDBioLDCZ4xpJFzBfTh_4XMZ4,3585
|
|
202
|
+
src/linters/srp/rust_analyzer.py,sha256=QsA9DzjxYJd1azeclyIgyCCtKq-0Bb8RZxc9VPQh0OE,7049
|
|
186
203
|
src/linters/srp/typescript_analyzer.py,sha256=Wi0P_G1v5AnZYtMN3sNm1iHva84-8Kep2LZ5RmAS4c4,2885
|
|
187
204
|
src/linters/srp/typescript_metrics_calculator.py,sha256=cDaHlnzMgFSTd2Sn5-tldR2HS6P8GMv4Qptep6PJozw,4093
|
|
188
205
|
src/linters/srp/violation_builder.py,sha256=jaIjVtRYWUTs1SVJVwd0FxCojo0DxhPzfhyfMKmAroM,3881
|
|
@@ -214,14 +231,19 @@ src/linters/stringly_typed/typescript/analyzer.py,sha256=iNEk6wQJJfmJoRTXx29GEeq
|
|
|
214
231
|
src/linters/stringly_typed/typescript/call_tracker.py,sha256=NPRpjqTe-Owi3_qJk_baojAazqaL6EsH4E2SIOsUAjU,11299
|
|
215
232
|
src/linters/stringly_typed/typescript/comparison_tracker.py,sha256=TiEldIqppu6i2XYd9a040HK0U4cy7IFf6Qjjlb93wAA,12573
|
|
216
233
|
src/linters/stringly_typed/violation_generator.py,sha256=g1dTc6EvjvTYmW3zdfTydmLaTCnqWDq4Q5UIntYxF1A,15336
|
|
234
|
+
src/linters/unwrap_abuse/__init__.py,sha256=ykT2V55ztzU7KwAle-ETBjJMQsTedGszffCpW6SC-C4,1154
|
|
235
|
+
src/linters/unwrap_abuse/config.py,sha256=rpf7j-YXR7jL0rb8kM-iryW2zyeZnJB73a5Siak-B4g,2210
|
|
236
|
+
src/linters/unwrap_abuse/linter.py,sha256=8Wgx4ul84_ywrCnlKR2T6y6_FlY0wNzaukziffG39II,5625
|
|
237
|
+
src/linters/unwrap_abuse/rust_analyzer.py,sha256=RRL7Sed07aO9hUGFZOraH4miruxalTEWwNJFo3iQDbc,4131
|
|
238
|
+
src/linters/unwrap_abuse/violation_builder.py,sha256=5IgvsK642AluT89Cd2QS43fV6ZsH70lZRxohoEjHoUQ,2623
|
|
217
239
|
src/orchestrator/__init__.py,sha256=XXLDJq2oaB-TpP2Y97GRnde9EkITGuFCmuLrDfxI9nY,245
|
|
218
240
|
src/orchestrator/core.py,sha256=rt3h-YFgF1aAFeKvTa0PP7k_8zfwpeGIqrIxKuyckxY,17683
|
|
219
241
|
src/orchestrator/language_detector.py,sha256=ALt2BEZKXQM2dWr1ChF9lZVj83YF4Bl9xwrB9ezfmMc,2799
|
|
220
|
-
src/templates/thailint_config_template.yaml,sha256=
|
|
242
|
+
src/templates/thailint_config_template.yaml,sha256=THQCYMMyjOERkGReb3G_KXtLNULW3eaI88BelHgONbo,14975
|
|
221
243
|
src/utils/__init__.py,sha256=NiBtKeQ09Y3kuUzeN4O1JNfUIYPQDS2AP1l5ODq-Dec,125
|
|
222
244
|
src/utils/project_root.py,sha256=aaxUM-LQ1okrPClmZWPFd_D09W3V1ArgJiidEEp_eU8,6262
|
|
223
|
-
thailint-0.
|
|
224
|
-
thailint-0.
|
|
225
|
-
thailint-0.
|
|
226
|
-
thailint-0.
|
|
227
|
-
thailint-0.
|
|
245
|
+
thailint-0.17.0.dist-info/METADATA,sha256=lDQImp9sIhDaLVPjdFgedYSVWlAaLdBg0ePMVK6ow50,7929
|
|
246
|
+
thailint-0.17.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
247
|
+
thailint-0.17.0.dist-info/entry_points.txt,sha256=DNoGUlxpaMFqxQDgHp1yeGqohOjdFR-kH19uHYi3OUY,72
|
|
248
|
+
thailint-0.17.0.dist-info/licenses/LICENSE,sha256=kxh1J0Sb62XvhNJ6MZsVNe8PqNVJ7LHRn_EWa-T3djw,1070
|
|
249
|
+
thailint-0.17.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|