thailint 0.5.0__py3-none-any.whl → 0.15.3__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/__init__.py +1 -0
- src/analyzers/__init__.py +4 -3
- src/analyzers/ast_utils.py +54 -0
- src/analyzers/rust_base.py +155 -0
- src/analyzers/rust_context.py +141 -0
- src/analyzers/typescript_base.py +4 -0
- src/cli/__init__.py +30 -0
- src/cli/__main__.py +22 -0
- src/cli/config.py +480 -0
- src/cli/config_merge.py +241 -0
- src/cli/linters/__init__.py +67 -0
- src/cli/linters/code_patterns.py +270 -0
- src/cli/linters/code_smells.py +342 -0
- src/cli/linters/documentation.py +83 -0
- src/cli/linters/performance.py +287 -0
- src/cli/linters/shared.py +331 -0
- src/cli/linters/structure.py +327 -0
- src/cli/linters/structure_quality.py +328 -0
- src/cli/main.py +120 -0
- src/cli/utils.py +395 -0
- src/cli_main.py +37 -0
- src/config.py +38 -25
- src/core/base.py +7 -2
- src/core/cli_utils.py +19 -2
- src/core/config_parser.py +5 -2
- src/core/constants.py +54 -0
- src/core/linter_utils.py +95 -6
- src/core/python_lint_rule.py +101 -0
- src/core/registry.py +1 -1
- src/core/rule_discovery.py +147 -84
- src/core/types.py +13 -0
- src/core/violation_builder.py +78 -15
- src/core/violation_utils.py +69 -0
- src/formatters/__init__.py +22 -0
- src/formatters/sarif.py +202 -0
- src/linter_config/directive_markers.py +109 -0
- src/linter_config/ignore.py +254 -395
- src/linter_config/loader.py +45 -12
- src/linter_config/pattern_utils.py +65 -0
- src/linter_config/rule_matcher.py +89 -0
- src/linters/collection_pipeline/__init__.py +90 -0
- src/linters/collection_pipeline/any_all_analyzer.py +281 -0
- src/linters/collection_pipeline/ast_utils.py +40 -0
- src/linters/collection_pipeline/config.py +75 -0
- src/linters/collection_pipeline/continue_analyzer.py +94 -0
- src/linters/collection_pipeline/detector.py +360 -0
- src/linters/collection_pipeline/filter_map_analyzer.py +402 -0
- src/linters/collection_pipeline/linter.py +420 -0
- src/linters/collection_pipeline/suggestion_builder.py +130 -0
- src/linters/cqs/__init__.py +54 -0
- src/linters/cqs/config.py +55 -0
- src/linters/cqs/function_analyzer.py +201 -0
- src/linters/cqs/input_detector.py +139 -0
- src/linters/cqs/linter.py +159 -0
- src/linters/cqs/output_detector.py +84 -0
- src/linters/cqs/python_analyzer.py +54 -0
- src/linters/cqs/types.py +82 -0
- src/linters/cqs/typescript_cqs_analyzer.py +61 -0
- src/linters/cqs/typescript_function_analyzer.py +192 -0
- src/linters/cqs/typescript_input_detector.py +203 -0
- src/linters/cqs/typescript_output_detector.py +117 -0
- src/linters/cqs/violation_builder.py +94 -0
- src/linters/dry/base_token_analyzer.py +16 -9
- src/linters/dry/block_filter.py +120 -20
- src/linters/dry/block_grouper.py +4 -0
- src/linters/dry/cache.py +104 -10
- src/linters/dry/cache_query.py +4 -0
- src/linters/dry/config.py +54 -11
- src/linters/dry/constant.py +92 -0
- src/linters/dry/constant_matcher.py +223 -0
- src/linters/dry/constant_violation_builder.py +98 -0
- src/linters/dry/duplicate_storage.py +5 -4
- src/linters/dry/file_analyzer.py +4 -2
- src/linters/dry/inline_ignore.py +7 -16
- src/linters/dry/linter.py +183 -48
- src/linters/dry/python_analyzer.py +60 -439
- src/linters/dry/python_constant_extractor.py +100 -0
- src/linters/dry/single_statement_detector.py +417 -0
- src/linters/dry/token_hasher.py +116 -112
- src/linters/dry/typescript_analyzer.py +68 -382
- src/linters/dry/typescript_constant_extractor.py +138 -0
- src/linters/dry/typescript_statement_detector.py +255 -0
- src/linters/dry/typescript_value_extractor.py +70 -0
- src/linters/dry/violation_builder.py +4 -0
- src/linters/dry/violation_filter.py +5 -4
- src/linters/dry/violation_generator.py +71 -14
- src/linters/file_header/atemporal_detector.py +68 -50
- src/linters/file_header/base_parser.py +93 -0
- src/linters/file_header/bash_parser.py +66 -0
- src/linters/file_header/config.py +90 -16
- src/linters/file_header/css_parser.py +70 -0
- src/linters/file_header/field_validator.py +36 -33
- src/linters/file_header/linter.py +140 -144
- src/linters/file_header/markdown_parser.py +130 -0
- src/linters/file_header/python_parser.py +14 -58
- src/linters/file_header/typescript_parser.py +73 -0
- src/linters/file_header/violation_builder.py +13 -12
- src/linters/file_placement/config_loader.py +3 -1
- src/linters/file_placement/directory_matcher.py +4 -0
- src/linters/file_placement/linter.py +66 -34
- src/linters/file_placement/pattern_matcher.py +41 -6
- src/linters/file_placement/pattern_validator.py +31 -12
- src/linters/file_placement/rule_checker.py +12 -7
- src/linters/lazy_ignores/__init__.py +43 -0
- src/linters/lazy_ignores/config.py +74 -0
- src/linters/lazy_ignores/directive_utils.py +164 -0
- src/linters/lazy_ignores/header_parser.py +177 -0
- src/linters/lazy_ignores/linter.py +158 -0
- src/linters/lazy_ignores/matcher.py +168 -0
- src/linters/lazy_ignores/python_analyzer.py +209 -0
- src/linters/lazy_ignores/rule_id_utils.py +180 -0
- src/linters/lazy_ignores/skip_detector.py +298 -0
- src/linters/lazy_ignores/types.py +71 -0
- src/linters/lazy_ignores/typescript_analyzer.py +146 -0
- src/linters/lazy_ignores/violation_builder.py +135 -0
- src/linters/lbyl/__init__.py +31 -0
- src/linters/lbyl/config.py +63 -0
- src/linters/lbyl/linter.py +67 -0
- src/linters/lbyl/pattern_detectors/__init__.py +53 -0
- src/linters/lbyl/pattern_detectors/base.py +63 -0
- src/linters/lbyl/pattern_detectors/dict_key_detector.py +107 -0
- src/linters/lbyl/pattern_detectors/division_check_detector.py +232 -0
- src/linters/lbyl/pattern_detectors/file_exists_detector.py +220 -0
- src/linters/lbyl/pattern_detectors/hasattr_detector.py +119 -0
- src/linters/lbyl/pattern_detectors/isinstance_detector.py +119 -0
- src/linters/lbyl/pattern_detectors/len_check_detector.py +173 -0
- src/linters/lbyl/pattern_detectors/none_check_detector.py +146 -0
- src/linters/lbyl/pattern_detectors/string_validator_detector.py +145 -0
- src/linters/lbyl/python_analyzer.py +215 -0
- src/linters/lbyl/violation_builder.py +354 -0
- src/linters/magic_numbers/context_analyzer.py +227 -225
- src/linters/magic_numbers/linter.py +28 -82
- src/linters/magic_numbers/python_analyzer.py +4 -16
- src/linters/magic_numbers/typescript_analyzer.py +9 -12
- src/linters/magic_numbers/typescript_ignore_checker.py +81 -0
- src/linters/method_property/__init__.py +49 -0
- src/linters/method_property/config.py +138 -0
- src/linters/method_property/linter.py +414 -0
- src/linters/method_property/python_analyzer.py +473 -0
- src/linters/method_property/violation_builder.py +119 -0
- src/linters/nesting/linter.py +24 -16
- src/linters/nesting/python_analyzer.py +4 -0
- src/linters/nesting/typescript_analyzer.py +6 -12
- src/linters/nesting/violation_builder.py +1 -0
- src/linters/performance/__init__.py +91 -0
- src/linters/performance/config.py +43 -0
- src/linters/performance/constants.py +49 -0
- src/linters/performance/linter.py +149 -0
- src/linters/performance/python_analyzer.py +365 -0
- src/linters/performance/regex_analyzer.py +312 -0
- src/linters/performance/regex_linter.py +139 -0
- src/linters/performance/typescript_analyzer.py +236 -0
- src/linters/performance/violation_builder.py +160 -0
- src/linters/print_statements/config.py +7 -12
- src/linters/print_statements/linter.py +26 -43
- src/linters/print_statements/python_analyzer.py +91 -93
- src/linters/print_statements/typescript_analyzer.py +15 -25
- src/linters/print_statements/violation_builder.py +12 -14
- src/linters/srp/class_analyzer.py +11 -7
- src/linters/srp/heuristics.py +56 -22
- src/linters/srp/linter.py +15 -16
- src/linters/srp/python_analyzer.py +55 -20
- src/linters/srp/typescript_metrics_calculator.py +110 -50
- src/linters/stateless_class/__init__.py +25 -0
- src/linters/stateless_class/config.py +58 -0
- src/linters/stateless_class/linter.py +349 -0
- src/linters/stateless_class/python_analyzer.py +290 -0
- src/linters/stringly_typed/__init__.py +36 -0
- src/linters/stringly_typed/config.py +189 -0
- src/linters/stringly_typed/context_filter.py +451 -0
- src/linters/stringly_typed/function_call_violation_builder.py +135 -0
- src/linters/stringly_typed/ignore_checker.py +100 -0
- src/linters/stringly_typed/ignore_utils.py +51 -0
- src/linters/stringly_typed/linter.py +376 -0
- src/linters/stringly_typed/python/__init__.py +33 -0
- src/linters/stringly_typed/python/analyzer.py +348 -0
- src/linters/stringly_typed/python/call_tracker.py +175 -0
- src/linters/stringly_typed/python/comparison_tracker.py +257 -0
- src/linters/stringly_typed/python/condition_extractor.py +134 -0
- src/linters/stringly_typed/python/conditional_detector.py +179 -0
- src/linters/stringly_typed/python/constants.py +21 -0
- src/linters/stringly_typed/python/match_analyzer.py +94 -0
- src/linters/stringly_typed/python/validation_detector.py +189 -0
- src/linters/stringly_typed/python/variable_extractor.py +96 -0
- src/linters/stringly_typed/storage.py +620 -0
- src/linters/stringly_typed/storage_initializer.py +45 -0
- src/linters/stringly_typed/typescript/__init__.py +28 -0
- src/linters/stringly_typed/typescript/analyzer.py +157 -0
- src/linters/stringly_typed/typescript/call_tracker.py +335 -0
- src/linters/stringly_typed/typescript/comparison_tracker.py +378 -0
- src/linters/stringly_typed/violation_generator.py +419 -0
- src/orchestrator/core.py +252 -14
- src/orchestrator/language_detector.py +5 -3
- src/templates/thailint_config_template.yaml +196 -0
- src/utils/project_root.py +3 -0
- thailint-0.15.3.dist-info/METADATA +187 -0
- thailint-0.15.3.dist-info/RECORD +226 -0
- thailint-0.15.3.dist-info/entry_points.txt +4 -0
- src/cli.py +0 -1665
- thailint-0.5.0.dist-info/METADATA +0 -1286
- thailint-0.5.0.dist-info/RECORD +0 -96
- thailint-0.5.0.dist-info/entry_points.txt +0 -4
- {thailint-0.5.0.dist-info → thailint-0.15.3.dist-info}/WHEEL +0 -0
- {thailint-0.5.0.dist-info → thailint-0.15.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: thailint
|
|
3
|
+
Version: 0.15.3
|
|
4
|
+
Summary: The AI Linter - Enterprise-grade linting and governance for AI-generated code across multiple languages
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Keywords: linter,ai,code-quality,static-analysis,file-placement,governance,multi-language,cli,docker,python,performance,typescript,rust
|
|
8
|
+
Author: Steve Jackson
|
|
9
|
+
Requires-Python: >=3.11,<4.0
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
23
|
+
Classifier: Topic :: Software Development :: Testing
|
|
24
|
+
Classifier: Topic :: Utilities
|
|
25
|
+
Classifier: Typing :: Typed
|
|
26
|
+
Requires-Dist: click (>=8.1.0,<9.0.0)
|
|
27
|
+
Requires-Dist: pyprojroot (>=0.3.0,<0.4.0)
|
|
28
|
+
Requires-Dist: pyyaml (>=6.0,<7.0)
|
|
29
|
+
Requires-Dist: tree-sitter (>=0.25.2,<0.26.0)
|
|
30
|
+
Requires-Dist: tree-sitter-rust (>=0.23.2,<0.24.0)
|
|
31
|
+
Requires-Dist: tree-sitter-typescript (>=0.23.2,<0.24.0)
|
|
32
|
+
Project-URL: Documentation, https://thai-lint.readthedocs.io/
|
|
33
|
+
Project-URL: Homepage, https://github.com/be-wise-be-kind/thai-lint
|
|
34
|
+
Project-URL: Repository, https://github.com/be-wise-be-kind/thai-lint
|
|
35
|
+
Description-Content-Type: text/markdown
|
|
36
|
+
|
|
37
|
+
# thai-lint
|
|
38
|
+
|
|
39
|
+
[](https://opensource.org/licenses/MIT)
|
|
40
|
+
[](https://www.python.org/downloads/)
|
|
41
|
+
[](https://pypi.org/project/thailint/)
|
|
42
|
+
[](https://thai-lint.readthedocs.io/)
|
|
43
|
+
|
|
44
|
+
**The AI Linter** - Catch the mistakes AI coding assistants keep making.
|
|
45
|
+
|
|
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 JavaScript with unified rules - filling gaps that existing linters miss.
|
|
47
|
+
|
|
48
|
+
## Installation
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pip install thailint
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Or with Docker:
|
|
55
|
+
```bash
|
|
56
|
+
docker run --rm -v $(pwd):/data washad/thailint:latest --help
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Quick Start
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Generate a config file (optional)
|
|
63
|
+
thailint init-config
|
|
64
|
+
|
|
65
|
+
# Run any linter
|
|
66
|
+
thailint dry src/
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
That's it. See violations, fix them, ship better code.
|
|
70
|
+
|
|
71
|
+
## Available Linters
|
|
72
|
+
|
|
73
|
+
| Linter | What It Catches | Command | Docs |
|
|
74
|
+
|--------|-----------------|---------|------|
|
|
75
|
+
| **DRY** | Duplicate code across files | `thailint dry src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/dry-linter/) |
|
|
76
|
+
| **Nesting** | Deeply nested if/for/while blocks | `thailint nesting src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/nesting-linter/) |
|
|
77
|
+
| **Magic Numbers** | Unnamed numeric literals | `thailint magic-numbers src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/magic-numbers-linter/) |
|
|
78
|
+
| **Performance** | O(n²) patterns: string += in loops, regex in loops | `thailint perf src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/performance-linter/) |
|
|
79
|
+
| **SRP** | Classes doing too much | `thailint srp src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/srp-linter/) |
|
|
80
|
+
| **File Header** | Missing documentation headers | `thailint file-header src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/file-header-linter/) |
|
|
81
|
+
| **Stateless Class** | Classes that should be functions | `thailint stateless-class src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/stateless-class-linter/) |
|
|
82
|
+
| **Collection Pipeline** | Loops with embedded filtering | `thailint pipeline src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/collection-pipeline-linter/) |
|
|
83
|
+
| **Method Property** | Methods that should be @property | `thailint method-property src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/method-property-linter/) |
|
|
84
|
+
| **File Placement** | Files in wrong directories | `thailint file-placement src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/file-placement-linter/) |
|
|
85
|
+
| **Lazy Ignores** | Unjustified linting suppressions | `thailint lazy-ignores src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/lazy-ignores-linter/) |
|
|
86
|
+
| **Print Statements** | Debug prints left in code | `thailint print-statements src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/print-statements-linter/) |
|
|
87
|
+
| **Stringly Typed** | Strings that should be enums | `thailint stringly-typed src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/stringly-typed-linter/) |
|
|
88
|
+
| **LBYL** | Look Before You Leap anti-patterns | `thailint lbyl src/` | [Guide](https://thai-lint.readthedocs.io/en/latest/lbyl-linter/) |
|
|
89
|
+
|
|
90
|
+
## Configuration
|
|
91
|
+
|
|
92
|
+
Create `.thailint.yaml` in your project root:
|
|
93
|
+
|
|
94
|
+
```yaml
|
|
95
|
+
dry:
|
|
96
|
+
enabled: true
|
|
97
|
+
min_duplicate_lines: 4
|
|
98
|
+
|
|
99
|
+
nesting:
|
|
100
|
+
enabled: true
|
|
101
|
+
max_nesting_depth: 3
|
|
102
|
+
|
|
103
|
+
magic-numbers:
|
|
104
|
+
enabled: true
|
|
105
|
+
allowed_numbers: [-1, 0, 1, 2, 10, 100]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Or generate one automatically:
|
|
109
|
+
```bash
|
|
110
|
+
thailint init-config --preset lenient # or: strict, standard
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
See [Configuration Reference](https://thai-lint.readthedocs.io/en/latest/configuration/) for all options.
|
|
114
|
+
|
|
115
|
+
## Output Formats
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Human-readable (default)
|
|
119
|
+
thailint dry src/
|
|
120
|
+
|
|
121
|
+
# JSON for CI/CD
|
|
122
|
+
thailint dry --format json src/
|
|
123
|
+
|
|
124
|
+
# SARIF for GitHub Code Scanning
|
|
125
|
+
thailint dry --format sarif src/ > results.sarif
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Ignoring Violations
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
# Line-level
|
|
132
|
+
timeout = 3600 # thailint: ignore[magic-numbers]
|
|
133
|
+
|
|
134
|
+
# File-level
|
|
135
|
+
# thailint: ignore-file[dry]
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Or in config:
|
|
139
|
+
```yaml
|
|
140
|
+
dry:
|
|
141
|
+
ignore:
|
|
142
|
+
- "tests/"
|
|
143
|
+
- "**/generated/**"
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
See [How to Ignore Violations](https://thai-lint.readthedocs.io/en/latest/how-to-ignore-violations/) for all 5 ignore levels.
|
|
147
|
+
|
|
148
|
+
## CI/CD Integration
|
|
149
|
+
|
|
150
|
+
```yaml
|
|
151
|
+
# GitHub Actions
|
|
152
|
+
- name: Run thailint
|
|
153
|
+
run: |
|
|
154
|
+
pip install thai-lint
|
|
155
|
+
thailint dry src/
|
|
156
|
+
thailint nesting src/
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Exit codes: `0` = success, `1` = violations found, `2` = error.
|
|
160
|
+
|
|
161
|
+
## Documentation
|
|
162
|
+
|
|
163
|
+
- **[Quick Start Guide](https://thai-lint.readthedocs.io/en/latest/quick-start/)** - Get running in 5 minutes
|
|
164
|
+
- **[Configuration Reference](https://thai-lint.readthedocs.io/en/latest/configuration/)** - All config options
|
|
165
|
+
- **[Troubleshooting](https://thai-lint.readthedocs.io/en/latest/troubleshooting/)** - Common issues
|
|
166
|
+
- **[Full Documentation](https://thai-lint.readthedocs.io/)** - Everything else
|
|
167
|
+
|
|
168
|
+
## Contributing
|
|
169
|
+
|
|
170
|
+
Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
git clone https://github.com/be-wise-be-kind/thai-lint.git
|
|
174
|
+
cd thai-lint
|
|
175
|
+
poetry install
|
|
176
|
+
just test
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## License
|
|
180
|
+
|
|
181
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
182
|
+
|
|
183
|
+
## Support
|
|
184
|
+
|
|
185
|
+
- **Issues**: [github.com/be-wise-be-kind/thai-lint/issues](https://github.com/be-wise-be-kind/thai-lint/issues)
|
|
186
|
+
- **Docs**: [thai-lint.readthedocs.io](https://thai-lint.readthedocs.io/)
|
|
187
|
+
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
src/__init__.py,sha256=0IT3HnAnSBEfos4G_27cflJiaoWWfeSEfHxsUr53OsM,2192
|
|
2
|
+
src/analyzers/__init__.py,sha256=hCN7ugG_Xs2N_WfWO7ZId-Cv4kvN1AxhIYTA4SD2fJ4,1062
|
|
3
|
+
src/analyzers/ast_utils.py,sha256=iWCRzlTw2QF5wWzQx1OmKshx7TU3pHxC8_omv9XUInw,1630
|
|
4
|
+
src/analyzers/rust_base.py,sha256=_sqmXhH4vylXbQEPp-gHnUYmf6F_2c5YXZgXBqk2Kcg,5185
|
|
5
|
+
src/analyzers/rust_context.py,sha256=8dV-LRst6CUPc2Z9iBXt70GtRTKo62PF3_uFBtFAKuw,4046
|
|
6
|
+
src/analyzers/typescript_base.py,sha256=Dtc_2jLSNoadh53MyeW2syrJMBIMVPvotcM8SeDEXH8,5244
|
|
7
|
+
src/api.py,sha256=pJ5l3qxccKBEY-BkANwzTgLAl1ZFq7OP6hx6LSxbhDw,4664
|
|
8
|
+
src/cli/__init__.py,sha256=nMxKv4D0t09LwUm4Z5w-b7vIuyn24SFzv78BKzE3AOQ,1272
|
|
9
|
+
src/cli/__main__.py,sha256=xIKI57yqB1NOw9eXnGXfU8rC2UwcAJYjDxlZbt9eP0w,671
|
|
10
|
+
src/cli/config.py,sha256=wh9lp0Z2FUEKbYawB65Y9vrlu1Yiqe8-CD_vnRDqwEg,14467
|
|
11
|
+
src/cli/config_merge.py,sha256=A1eCthiLwjj0SEhOcxa6t2hYwWMapGJpL9sCmYvUFw4,8464
|
|
12
|
+
src/cli/linters/__init__.py,sha256=Dlx2CRHT5_QeIeCJ0horPXci9zRP_KzSz_-mg0VMbOw,2343
|
|
13
|
+
src/cli/linters/code_patterns.py,sha256=2AcFdLPPdkJ8U883ozXE_0eLWRdiL_xfzXm4kmRn-Ro,11072
|
|
14
|
+
src/cli/linters/code_smells.py,sha256=yrKqRD3JTVVqyPL8rwK9VPbHgccXoj2IfaLK3lBF4Jc,11782
|
|
15
|
+
src/cli/linters/documentation.py,sha256=AhkyXfH2FbcxXT3BV6GIKkGbWCjyrz8qcKhz3sx7Yww,3289
|
|
16
|
+
src/cli/linters/performance.py,sha256=qvCW6T84zNZi1TyuxHtsEksgCtMA5TUgt_UdSq0vqHo,9878
|
|
17
|
+
src/cli/linters/shared.py,sha256=eVXhBDr69fRGAP4lApTR_M0gDfLeWlDAqx6VCEAWXsU,10117
|
|
18
|
+
src/cli/linters/structure.py,sha256=EGjw0zMLdGi4lTwM1zd_FzxQ7A-AG3fNPcKcF5uGFSo,10748
|
|
19
|
+
src/cli/linters/structure_quality.py,sha256=0npTcI6OUMVmvd-Ha6NjDZb2Dn1EhpfTLXmMRB69qaI,10739
|
|
20
|
+
src/cli/main.py,sha256=mRyRN_IQI2WyqDCxI8vuzdhbkCkVrK6INfJPjU8ayIU,3844
|
|
21
|
+
src/cli/utils.py,sha256=wFMvW7ScseHxKgvAmuQCWWHBGbtBzu8oPwATsCyNsfU,12610
|
|
22
|
+
src/cli_main.py,sha256=C0Ey7YNlG3ipqb3KsJZ8rL8PJ4ueVp_45IUirGidvHI,1618
|
|
23
|
+
src/config.py,sha256=O3ixzsYekGjlggmIsawCU1bctOa0MyG2IczHpg3mGyw,12753
|
|
24
|
+
src/core/__init__.py,sha256=5FtsDvhMt4SNRx3pbcGURrxn135XRbeRrjSUxiXwkNc,381
|
|
25
|
+
src/core/base.py,sha256=u5A8geprlKnsJk4ShiLHTKXRekZUB4I6rPQWxgiFeto,8019
|
|
26
|
+
src/core/cli_utils.py,sha256=ZdFSPrZ4WfpTMh-mc_Z3u5OYidE1YyPRKflMynPosa8,6552
|
|
27
|
+
src/core/config_parser.py,sha256=CRHV2-csxag6yQzx_4IYYz57QSUYjPkeSb0XvOyshRI,4272
|
|
28
|
+
src/core/constants.py,sha256=PKtPDqk6k9VuOSgjq1FAdi2CTvlnhdXvLj91dNaMDTA,1584
|
|
29
|
+
src/core/linter_utils.py,sha256=StnKFzJgSvLyao1S0LpTKhsXo8nOwpdKpxo7mXl5PIg,8594
|
|
30
|
+
src/core/python_lint_rule.py,sha256=OpdIDLPV1MDtmjy6GPrrOA3_rRV2_x14keHAQQtI_pc,3516
|
|
31
|
+
src/core/registry.py,sha256=yRA8mQLiZwjmgxl1wSTgdj1cuo_QXuRdrXt3NpCBUgE,3285
|
|
32
|
+
src/core/rule_discovery.py,sha256=tgRH-BJGKsQTxfa249yrY7UJuonRjobMCENqmhcbAeY,5496
|
|
33
|
+
src/core/types.py,sha256=SElFzf_VSrAMsoiE0aU8ZYXuvKqdfwfM5umUHx4eT8w,3342
|
|
34
|
+
src/core/violation_builder.py,sha256=dOPFfZx6U5_TMgaTop-4SUV2jHOZjBo67uwgiS_s-uE,6694
|
|
35
|
+
src/core/violation_utils.py,sha256=hSTSfQaaB7038G2Au4vqBLYTnkoaSN3k70IxWacjbl8,1993
|
|
36
|
+
src/formatters/__init__.py,sha256=yE1yIL8lplTMEjsmQm7F-kOMaYq7OjmbFuiwwK0D-gM,815
|
|
37
|
+
src/formatters/sarif.py,sha256=gGOwb_v7j4mx4bpvV1NNDd-JyHH8i8XX89iQ6uRSvG4,7050
|
|
38
|
+
src/linter_config/__init__.py,sha256=_I2VVlZlfKyT-tKukuUA5-aVcHLOe3m6C2cev43AiEc,298
|
|
39
|
+
src/linter_config/directive_markers.py,sha256=nRc2Mp3B1mn6tu1XH88ugMxWffk1k8OUNohepaRQ0S0,3245
|
|
40
|
+
src/linter_config/ignore.py,sha256=40afiMsu1zC29RiwGX8hUPUqM056H_wcOgZZUNOwIes,13111
|
|
41
|
+
src/linter_config/loader.py,sha256=K6mKRkP2jgwar-pwBoJGWgwynLVjqdez-l3Nd6bUCMk,3363
|
|
42
|
+
src/linter_config/pattern_utils.py,sha256=BjV95SySST3HqZBwF1Og8yoHqFxuqQ16VPCacE21ks0,2056
|
|
43
|
+
src/linter_config/rule_matcher.py,sha256=EWqSv4UY90fWps3AzDCSF7PZCbYyFTEBZT2h_txcRms,2779
|
|
44
|
+
src/linters/__init__.py,sha256=-nnNsL8E5-2p9qlLKp_TaShHAjPH-NacOEU1sXmAR9k,77
|
|
45
|
+
src/linters/collection_pipeline/__init__.py,sha256=BcnbY3wgJB1XLfZ9J9qfUJQ1_yCo_THjGDTppxJEMZY,3231
|
|
46
|
+
src/linters/collection_pipeline/any_all_analyzer.py,sha256=u8NGIYrJTuP3U6je5rkeEUV2Bh1yePC12vl-czAU5GU,7554
|
|
47
|
+
src/linters/collection_pipeline/ast_utils.py,sha256=JZsJeel9BzVIOfnENgVcZR8wMNoQ-RJoxuBx-J7w9Uk,1227
|
|
48
|
+
src/linters/collection_pipeline/config.py,sha256=EDlPcYEsECfAhZu9h1z5MVszRdr9Okdp3Ea8bf8c2mI,2782
|
|
49
|
+
src/linters/collection_pipeline/continue_analyzer.py,sha256=Azn7-2MLpi0M68dXDLgXCbIBpCT1i3GSUGE13U2Tl4U,2728
|
|
50
|
+
src/linters/collection_pipeline/detector.py,sha256=7_keKR5lGo5rvOVCAvV_6-bG29I_SYAhkkxP6ES3wKg,11696
|
|
51
|
+
src/linters/collection_pipeline/filter_map_analyzer.py,sha256=QbTjObryaLVB71MD4b4SyoOMEO_EgMNedNZLVm05QCQ,11829
|
|
52
|
+
src/linters/collection_pipeline/linter.py,sha256=53pkC1a6mvNTzjK_LDV_JmMysbZBLUsM_NjavvAZZBQ,13552
|
|
53
|
+
src/linters/collection_pipeline/suggestion_builder.py,sha256=4-RHBw95u7gPKpoN1xZlpSOkqzXY7_TRrB_otUXsdDE,4357
|
|
54
|
+
src/linters/cqs/__init__.py,sha256=d78ktPDBk_D9BStrNA99lYFHmuIVWke9wbVHiX_h81g,2120
|
|
55
|
+
src/linters/cqs/config.py,sha256=09U8rGSC8B4QS6ivrCKFPTXzLsU6oTSAjgIkwUrmQlc,2148
|
|
56
|
+
src/linters/cqs/function_analyzer.py,sha256=lPAmqLM2slEN0YkVEUy8xrq3pT7dQahy6sQUY6KvgfA,7756
|
|
57
|
+
src/linters/cqs/input_detector.py,sha256=GdCqXvVIGXOjKdCy5rQsX-IP88-taPcU3TLCumjMIqc,5004
|
|
58
|
+
src/linters/cqs/linter.py,sha256=QWgKuIzE678nUy60dY5BMh1NllLblSh9sbfIxmRlq-o,5666
|
|
59
|
+
src/linters/cqs/output_detector.py,sha256=uLddl9skCTICYXHSvIDYsKLbmKb3wXpZVkXjASVf-fk,3077
|
|
60
|
+
src/linters/cqs/python_analyzer.py,sha256=84x8-vUPRK0GkAgPKB-UzGmRX5Sb84Vq-fi_tpTQAGE,1879
|
|
61
|
+
src/linters/cqs/types.py,sha256=QL_kt1ywYB8KC2QRO-vMMygqHPVMoNS9FAU19zQmRs0,2816
|
|
62
|
+
src/linters/cqs/typescript_cqs_analyzer.py,sha256=kd1_b6dsKDWifxD436zss32eoiX5opURsqm6G8no7YQ,2318
|
|
63
|
+
src/linters/cqs/typescript_function_analyzer.py,sha256=f3TVZXpaDYRUc8xEw3TRBc4Xbg41qmAbACRnjHkTdcQ,7790
|
|
64
|
+
src/linters/cqs/typescript_input_detector.py,sha256=0PazhU69Utc_TGJTehYtSFLn0nhDfELWiX5YcvLWyWk,7979
|
|
65
|
+
src/linters/cqs/typescript_output_detector.py,sha256=b3JlDabgvRElsAkkopIVJfGq6BV0y_wcsNvWzPGO9F4,4122
|
|
66
|
+
src/linters/cqs/violation_builder.py,sha256=6bRWs9b9bqiSYaxi87gxWieKMTZaPCwHMMpplVpKZMo,2868
|
|
67
|
+
src/linters/dry/__init__.py,sha256=p58tN3z_VbulfTkRm1kLZJ43Bemt66T2sro1teirUY8,826
|
|
68
|
+
src/linters/dry/base_token_analyzer.py,sha256=hkR3MI6UYwQ7PNJiyGiIPiX7uMrDRHr0mzI-aG8wVCM,3199
|
|
69
|
+
src/linters/dry/block_filter.py,sha256=3RgmRSqYFk2eqATLOWN3hET09JuaPEFux3ResA0ltqo,11432
|
|
70
|
+
src/linters/dry/block_grouper.py,sha256=NP66BlofaY7HVXcWwmK5lyiNXbaTlU1V3IbcZubIq_I,1937
|
|
71
|
+
src/linters/dry/cache.py,sha256=909Va6bsq_DREooZGE1VDisefN_QqfPTL1ZKPi7k7Bk,8911
|
|
72
|
+
src/linters/dry/cache_query.py,sha256=qu_uHe360ZvKmFTBvfREjjPMGbJgLQsFTKPVIA2jQJ0,1949
|
|
73
|
+
src/linters/dry/config.py,sha256=3l1Ly3JbeYLvBbpyBsti2hGAKvxDShZ6d4uc8FEMB0I,7283
|
|
74
|
+
src/linters/dry/config_loader.py,sha256=wikqnigOp6p1h9jaAATV_3bDXSiaIUFaf9xg1jQMDpo,1313
|
|
75
|
+
src/linters/dry/constant.py,sha256=n9cNwa-1GQPISGZ3dgGcpLv7tc-uy56ravHiFsIwoRk,3249
|
|
76
|
+
src/linters/dry/constant_matcher.py,sha256=GcfCRKNvUchandcqM8lz54BpEpSkdxr4K2Vb1aTAlcc,8074
|
|
77
|
+
src/linters/dry/constant_violation_builder.py,sha256=F88aLlgscWmyUeIr_EgF4CeheXEc6Iv2pBG2eKJTmts,4048
|
|
78
|
+
src/linters/dry/deduplicator.py,sha256=a1TRvldxCszf5QByo1ihXF3W98dpGuyaRT74jPfQftM,3988
|
|
79
|
+
src/linters/dry/duplicate_storage.py,sha256=9pIALnwAuz5BJUYNXrPbObbP932CE9x0vgUkICryT_s,1970
|
|
80
|
+
src/linters/dry/file_analyzer.py,sha256=3uO2fy8HvxFiRCtYaBs9LztkzvDynqmy7INYRaJjK-g,2990
|
|
81
|
+
src/linters/dry/inline_ignore.py,sha256=3fgPsn_kXeF7kVy_9FL8xYwSUA9cSmgUR3F0tOwzjuY,4275
|
|
82
|
+
src/linters/dry/linter.py,sha256=oXhFAFYrukiVQq8KmfwGBXvbPLutwW_OuzZAElRTYbc,12066
|
|
83
|
+
src/linters/dry/python_analyzer.py,sha256=b7n7u3NbOW3DFZHeC-bG3N_6VgW2NU2easG8pIHYaZc,10962
|
|
84
|
+
src/linters/dry/python_constant_extractor.py,sha256=v9-3NDCq9CKT6uvti_PRIC3DMEESHW2g3i2IfFy0hw8,3469
|
|
85
|
+
src/linters/dry/single_statement_detector.py,sha256=ZmMo_tsvVxugFmnNzWtGc-4e5sGOw18HHxHre3lRUUA,18220
|
|
86
|
+
src/linters/dry/storage_initializer.py,sha256=ykMALFs4uMUrN0_skEwySDl_t5Dm_LGHllF0OxDhiUI,1366
|
|
87
|
+
src/linters/dry/token_hasher.py,sha256=RoUXByVHwf9TZjRqXB3aI1htNZS0pX41oOsUxvlsF00,4951
|
|
88
|
+
src/linters/dry/typescript_analyzer.py,sha256=xGUcQO8MvJnAVgn5GZRwQAc5xZsD0T-qOQlFuJcvfZM,10777
|
|
89
|
+
src/linters/dry/typescript_constant_extractor.py,sha256=ri5NivpcxLAxwdMJvbeTF4Vu0WS_Fgf7FydQGoVNgm0,5130
|
|
90
|
+
src/linters/dry/typescript_statement_detector.py,sha256=8WiwcjLs8j8_wp0UTsoXN0vVr1mNa562O1CB-FtaQR4,8848
|
|
91
|
+
src/linters/dry/typescript_value_extractor.py,sha256=TbHIvcEnmjSV1WNnkRbXeUi_JA9-rGX0_BrD4bczO9Y,2519
|
|
92
|
+
src/linters/dry/violation_builder.py,sha256=WkCibSNytoqMHGC-3GrVff4PD7-SOnVzzZgkMeqmzco,2952
|
|
93
|
+
src/linters/dry/violation_filter.py,sha256=2e6NHN7GYadt27Pz5kiXhttKPJu1loiXhOi0G3J3Epk,3211
|
|
94
|
+
src/linters/dry/violation_generator.py,sha256=aXKVB-ERpigzwFD4iY5GoN2BWTESBhZaO6Qr7Vm7mzU,8146
|
|
95
|
+
src/linters/file_header/__init__.py,sha256=S3a2xrOlxnNWD02To5K2ZwILsNEvSj1IvUAH8RjgOV4,791
|
|
96
|
+
src/linters/file_header/atemporal_detector.py,sha256=lerkiMwiUhYv3X3vxpm_88otZhSMG3DBgryhFyxe3As,3934
|
|
97
|
+
src/linters/file_header/base_parser.py,sha256=k6ymg1ocuesA6PH7NMDQOy0LTgSglu0wXed68fPaHxM,3382
|
|
98
|
+
src/linters/file_header/bash_parser.py,sha256=aRlIbR6x8IeYAj8w6a3eQzdZZivHB0oPg843CTnQm-Y,2481
|
|
99
|
+
src/linters/file_header/config.py,sha256=gdnZoJ-lEq8DACr6C2UKLorHiFCNdQspP_88FQBtoyc,4755
|
|
100
|
+
src/linters/file_header/css_parser.py,sha256=ijpGMixg2ZqNWWdiZjSNtMXCOhm6XDfSY7OU68B9fS8,2332
|
|
101
|
+
src/linters/file_header/field_validator.py,sha256=owA-ahjx0cUWBIqCxT0dMyGTABQA0b8HbdWbZPQk7pw,2769
|
|
102
|
+
src/linters/file_header/linter.py,sha256=t51VJzKnRo8s_RM0iZLSQBmmLT4mmM8UDpaRekNurwE,12564
|
|
103
|
+
src/linters/file_header/markdown_parser.py,sha256=4rNYrxuZbJz4LoSmv0U741Cv7wP9jftTl0Ty7mBDHRI,5323
|
|
104
|
+
src/linters/file_header/python_parser.py,sha256=RTOeEt1b3tCvFWbZIt89awQA37CUOSBIGagEYnayn-M,1432
|
|
105
|
+
src/linters/file_header/typescript_parser.py,sha256=R11Vkr6dUVaU8t90m8rrkMzODtBYk7u-TYFsMDRwzX8,2532
|
|
106
|
+
src/linters/file_header/violation_builder.py,sha256=HPYTmrcCmcO6Dx5dhmj85zZgEBM5EZqTgql-0CA0A0k,2745
|
|
107
|
+
src/linters/file_placement/__init__.py,sha256=vJ43GZujcbAk-K3DwfsQZ0J3yP_5G35CKssatLyntXk,862
|
|
108
|
+
src/linters/file_placement/config_loader.py,sha256=tLBeP9njYmtD0FNQsKkywMQJWrZaDBl7z_5sqVLzndc,2690
|
|
109
|
+
src/linters/file_placement/directory_matcher.py,sha256=1rxJtCEzqDYDQnscVX6pzk7gxCMD11pVIGaWcli-tHY,2742
|
|
110
|
+
src/linters/file_placement/linter.py,sha256=tjmoTYadTrXpyGXGiUNYwo8g5P2eGZ82LArgp9S8ztk,15283
|
|
111
|
+
src/linters/file_placement/path_resolver.py,sha256=S6g7xOYsoSc0O_RDJh8j4Z2klcwzp16rSUfEAErGOTI,1972
|
|
112
|
+
src/linters/file_placement/pattern_matcher.py,sha256=56PCVL_4ajpTCnebHNUZKMJyAWeUOUHkeEwd4o3ofXQ,3183
|
|
113
|
+
src/linters/file_placement/pattern_validator.py,sha256=P6qbgnVxxFlBrsPzxjXjVlVPpr4ppeuJMhhnCScE6fA,4266
|
|
114
|
+
src/linters/file_placement/rule_checker.py,sha256=HInWmyxxZfqmrBH-5RealvYIV5ChzGd4EwxB6RNZE9w,7930
|
|
115
|
+
src/linters/file_placement/violation_factory.py,sha256=NkQmBcgpa3g3W2ZdFZNQ5djLVP4x9OKs65d7F1rCKvM,6040
|
|
116
|
+
src/linters/lazy_ignores/__init__.py,sha256=qPwCC1Y-TPn6tNLTO4X6QsACaAiPMBpsIKlKh_dSz5k,1656
|
|
117
|
+
src/linters/lazy_ignores/config.py,sha256=Bg7A01BLt4zhXOSb_AQsNP7vNtyyL30HTcACdsdBStY,2960
|
|
118
|
+
src/linters/lazy_ignores/directive_utils.py,sha256=x0Xaj92R1Z7kAmCpH0rUWRBd32rRwd8z9NBZNgG_LeI,5111
|
|
119
|
+
src/linters/lazy_ignores/header_parser.py,sha256=ADtVJUoJfoVx_zehoPpo6YLws0N-7c2PLK1PhNqn5Uk,6030
|
|
120
|
+
src/linters/lazy_ignores/linter.py,sha256=1bl3b2NliVurlb9bUcZUzd8sBZG6KJhRODD-Mb46HnE,6052
|
|
121
|
+
src/linters/lazy_ignores/matcher.py,sha256=3djc1iRiwBeigmRl5OIeIIZqRYRiku7E65WyzELg2LY,6496
|
|
122
|
+
src/linters/lazy_ignores/python_analyzer.py,sha256=MuP-mXuLrZ3Qe3OHl63iVVvlja5YbziUUEcOKkKVNG8,7383
|
|
123
|
+
src/linters/lazy_ignores/rule_id_utils.py,sha256=sE7kAQFO6zGAR5JQN2OLLVjAdiVNPZONTb0sY01ri9w,5809
|
|
124
|
+
src/linters/lazy_ignores/skip_detector.py,sha256=9RK5uD4b2pAfdJsK1dHRTAWG4kKfAf1yfjc1OBsI14M,10461
|
|
125
|
+
src/linters/lazy_ignores/types.py,sha256=2lnFazlxbJ7SEThEVcWaV5PWLztYyGcPzYQVzHE9iO0,2334
|
|
126
|
+
src/linters/lazy_ignores/typescript_analyzer.py,sha256=k8R60Mcw9OxvHFFUPhUErrb-tbek7Q7PXXZDq_H0ioM,5322
|
|
127
|
+
src/linters/lazy_ignores/violation_builder.py,sha256=FIlybBPgXTQfot745eQwM4gm7-Pst50SBpBhriG53-w,4342
|
|
128
|
+
src/linters/lbyl/__init__.py,sha256=5_an3Zy9iQvbajvuQT_DTMtlIMfOWxwewZGFe-cSDg8,1124
|
|
129
|
+
src/linters/lbyl/config.py,sha256=kWCjBRs1HEVf9oK4dHKHfjQX8KU-o5i-Jc_94ULDD4Y,2434
|
|
130
|
+
src/linters/lbyl/linter.py,sha256=sp6PETOKuk13wzfWYPYmWVqcdCwcFRr6CGvFmNPunaU,2288
|
|
131
|
+
src/linters/lbyl/pattern_detectors/__init__.py,sha256=23wnoXvQs9IFpk1RqjQhqpdtUhEE-MjiIlKrrhrtfxs,2064
|
|
132
|
+
src/linters/lbyl/pattern_detectors/base.py,sha256=O1R2k9ZLECLou7IN-FsNHC530CFxqQ6knhxhhQwpp6w,1881
|
|
133
|
+
src/linters/lbyl/pattern_detectors/dict_key_detector.py,sha256=xUPlHP1ZP8eQhUG8SUd5_Ke_J-h-XuB8_0ZPe9XGhH4,3982
|
|
134
|
+
src/linters/lbyl/pattern_detectors/division_check_detector.py,sha256=FG8PTtF0Ukg6cf7AGhqsSzuyDw90y7R2F63w0BAwwbA,7936
|
|
135
|
+
src/linters/lbyl/pattern_detectors/file_exists_detector.py,sha256=ZXK0rr60QgUNXm96mZmIuoMzHzpZ1USGiR4E_snoWUs,8410
|
|
136
|
+
src/linters/lbyl/pattern_detectors/hasattr_detector.py,sha256=mE0-mgMxArQ2RdQsI8u2dlRUm912k-pufd-6cAEbdfo,4376
|
|
137
|
+
src/linters/lbyl/pattern_detectors/isinstance_detector.py,sha256=3Zv_jPqB29vlrnthAOyEd6fN3f2P-cYtASLHt0PIKp4,4600
|
|
138
|
+
src/linters/lbyl/pattern_detectors/len_check_detector.py,sha256=A2Hlz7tAPmrcccJlXHEVKnEUGwSt9poBwcksRljQshM,6407
|
|
139
|
+
src/linters/lbyl/pattern_detectors/none_check_detector.py,sha256=mrLIK6sZ1QwM734qr5MtsyU-yaXr8zBNOjasXQ5PsEs,5428
|
|
140
|
+
src/linters/lbyl/pattern_detectors/string_validator_detector.py,sha256=GXXcsCfmp0yU7cgmg2LpYl8JRXpeRjZhYdq5A-lTPZY,5068
|
|
141
|
+
src/linters/lbyl/python_analyzer.py,sha256=auPrWFUEmFxtv1GB3exJzz7uX71gXqEUCHKO64UDR8w,8041
|
|
142
|
+
src/linters/lbyl/violation_builder.py,sha256=6wVX9U7Jq1ONWcGuasvIwJE9mXHcT778p0OcPC0Wx7w,10296
|
|
143
|
+
src/linters/magic_numbers/__init__.py,sha256=17dkCUf0uiYLvpOZF01VDojj92NzxXZMtRhrSBUzsdc,1689
|
|
144
|
+
src/linters/magic_numbers/config.py,sha256=3zV6ZNezouBWUYy4kMw5PUlPNvIWXVwOxTz1moZfRoI,3270
|
|
145
|
+
src/linters/magic_numbers/context_analyzer.py,sha256=EgDyxxjvEqyD3FX0Fnxj5RcOPyvyVs_rYFxj2HOxYdg,7309
|
|
146
|
+
src/linters/magic_numbers/linter.py,sha256=CGo_35ujoCbNXbb0XI4KGCm5C9PCe_LzvXrgmvYN-I4,16736
|
|
147
|
+
src/linters/magic_numbers/python_analyzer.py,sha256=Ba-EODvAkUIOhqMFv86MxMlXqF20ngvgubiWN_U_IUk,2446
|
|
148
|
+
src/linters/magic_numbers/typescript_analyzer.py,sha256=-2YPmNWXHJN8R2siV3pJk_3Baj-A9nnvQRpU35YBKgs,7519
|
|
149
|
+
src/linters/magic_numbers/typescript_ignore_checker.py,sha256=9JWqtXd8KU_GCc_66KSZT2X7uQhNGpxE2ikOyjcLyao,2847
|
|
150
|
+
src/linters/magic_numbers/violation_builder.py,sha256=SqIQv3N9lpP2GRC1TC5InrvaEdrAq24V7Ec2Xj5olb0,3308
|
|
151
|
+
src/linters/method_property/__init__.py,sha256=t0C6zD5WLm-McgmvVajQJg4HQfOi7_4YzNLhKNA484w,1415
|
|
152
|
+
src/linters/method_property/config.py,sha256=_TbUc0piC1FeW3qsw4hYryzWPUOq_laia_QNLe1Y0aw,5529
|
|
153
|
+
src/linters/method_property/linter.py,sha256=9pgUEIK7ASZVwtsRVOg3U0k-GR0lHSLpUv_1TnIcZPA,12700
|
|
154
|
+
src/linters/method_property/python_analyzer.py,sha256=uyNUJHxACw01Z1Uz6lRUPe753MpzUOYuQ999rRt5ocE,15386
|
|
155
|
+
src/linters/method_property/violation_builder.py,sha256=A7SwZWlVG_7W5pJiHOvIroI2q4UuOQNryOYvmX3APLs,4251
|
|
156
|
+
src/linters/nesting/__init__.py,sha256=tszmyCEQMpEwB5H84WcAUfRYDQl7jpsn04es5DtAHsM,3200
|
|
157
|
+
src/linters/nesting/config.py,sha256=PfPA2wJn3i6HHXeM0qu6Qx-v1KJdRwlRkFOdpf7NhS8,2405
|
|
158
|
+
src/linters/nesting/linter.py,sha256=bn5aPlxKZNw3T2LsOSfZUK_shkxcsdUS_LtFVsGJexk,6622
|
|
159
|
+
src/linters/nesting/python_analyzer.py,sha256=__fs_NE9xA4NM1MDOHBGdrI0zICkTcgbVZtfT03cxF0,3230
|
|
160
|
+
src/linters/nesting/typescript_analyzer.py,sha256=70TsjP3EJWiHJ1ncMaveFE0e9_HdukWZr9LM0_MDXr8,3639
|
|
161
|
+
src/linters/nesting/typescript_function_extractor.py,sha256=dDB1otJnFMCo-Pj4mTr4gekKe7V4ArOAtX6gV0dBDc4,4494
|
|
162
|
+
src/linters/nesting/violation_builder.py,sha256=WwgR_Q9pfPJOoVuNZQL4MU3-Wc6RX_GGL5Rc2-RVlbI,4829
|
|
163
|
+
src/linters/performance/__init__.py,sha256=UXJwfTk2ZCBqdy0Rtqcn2rMffWXXauq14oNMPtJDO3o,3118
|
|
164
|
+
src/linters/performance/config.py,sha256=TmOdKtbrYx8POzFx_7fkgWfHcri2oBIXsm4V9FqkAek,1458
|
|
165
|
+
src/linters/performance/constants.py,sha256=WBiSCOMGNd01o5D0M95Lyx_liZAd3zBkIPu7ZXzcW3M,1127
|
|
166
|
+
src/linters/performance/linter.py,sha256=PrzHt5Y83eUlLWnZol7PPJsYRTPlIPv8-2FDJ-u88j8,5719
|
|
167
|
+
src/linters/performance/python_analyzer.py,sha256=EgRBzk-0CHS48RM2IlqilKkDsMadyjf1IumMUvfw2zs,13808
|
|
168
|
+
src/linters/performance/regex_analyzer.py,sha256=GZKf3jWWH28TxGlTqDeyd97JDbxjIT1pPO2jcgZwofY,10520
|
|
169
|
+
src/linters/performance/regex_linter.py,sha256=velv84oQ3TxP9cJlYmSts3_DjS1h-RINuZDmQx-YatU,5078
|
|
170
|
+
src/linters/performance/typescript_analyzer.py,sha256=t0jvLvVG97ffgC-4KhXobKa9iG9iGREOV5Kta7XsbFw,8740
|
|
171
|
+
src/linters/performance/violation_builder.py,sha256=q4fy3SVVrveyYYg9O2-MZfWjlHlKRP3llH1-8VQ6sUU,5752
|
|
172
|
+
src/linters/print_statements/__init__.py,sha256=yhvdTFSqBB4UDreeadTHKFzhayxeT6JkF3yxUHMgn1g,1893
|
|
173
|
+
src/linters/print_statements/config.py,sha256=rth3XmzqZGzXkRXDIVZswdtNOXIe1vIRaF46tVLKnyQ,3041
|
|
174
|
+
src/linters/print_statements/linter.py,sha256=CcKolaaHYJzhpxWXthYZ7xXhfTnxmyOIhuE40Ly3ofA,14351
|
|
175
|
+
src/linters/print_statements/python_analyzer.py,sha256=48IDRQEv861B90qCl5w8ASxcXR7juZ429YX2ST9n2ic,5028
|
|
176
|
+
src/linters/print_statements/typescript_analyzer.py,sha256=EFE3bjRENvCPEYmNNxZ4jiq1VCA-rEUAJ_VFWJApLqY,4935
|
|
177
|
+
src/linters/print_statements/violation_builder.py,sha256=Vs5m3AnWjrQqQHf6JJDaPP5B1V3YNl5pepG_oiTJnx4,3333
|
|
178
|
+
src/linters/srp/__init__.py,sha256=GbhaSB2_AYY-mWgG_ThbyAcDXoVZuB5eLzguoShf38w,3367
|
|
179
|
+
src/linters/srp/class_analyzer.py,sha256=tZ6xAT0Y7LkzeVlGHckQRhFdnssuetUYxTQdUHwBoCo,4045
|
|
180
|
+
src/linters/srp/config.py,sha256=hTxrM21HIOmg0sM6eJ_h3hRnuxqRZEgs13Ie97-PDr4,3397
|
|
181
|
+
src/linters/srp/heuristics.py,sha256=hMWRdTJoIY-T0s7ruB6ju27RPBJCATMiUvLZXzQvTsY,4229
|
|
182
|
+
src/linters/srp/linter.py,sha256=ut6k8QDb4P2CXHl5Jnem0eFBN2lxcvsRyGnnQqMZL8w,7660
|
|
183
|
+
src/linters/srp/metrics_evaluator.py,sha256=Prk_dPacas_dX7spAzV0g734srmzT5u0t5d4mTG9g2o,1606
|
|
184
|
+
src/linters/srp/python_analyzer.py,sha256=PH27l38BFPNmj22Z10QDBioLDCZ4xpJFzBfTh_4XMZ4,3585
|
|
185
|
+
src/linters/srp/typescript_analyzer.py,sha256=Wi0P_G1v5AnZYtMN3sNm1iHva84-8Kep2LZ5RmAS4c4,2885
|
|
186
|
+
src/linters/srp/typescript_metrics_calculator.py,sha256=cDaHlnzMgFSTd2Sn5-tldR2HS6P8GMv4Qptep6PJozw,4093
|
|
187
|
+
src/linters/srp/violation_builder.py,sha256=jaIjVtRYWUTs1SVJVwd0FxCojo0DxhPzfhyfMKmAroM,3881
|
|
188
|
+
src/linters/stateless_class/__init__.py,sha256=8ePpinmCD27PCz7ukwUWcNwo-ZgyvhOquns-U51MyiQ,1063
|
|
189
|
+
src/linters/stateless_class/config.py,sha256=u8Jt_xygIkuxZx2o0Uw_XFatOh11QhC9aN8lB_vfnLk,1993
|
|
190
|
+
src/linters/stateless_class/linter.py,sha256=Rm3fZfkyUOYeBodcLPUcMNKUHPuc5NgKOeDioGXyu_M,11338
|
|
191
|
+
src/linters/stateless_class/python_analyzer.py,sha256=psEx2pG-eZJfK9ViX4YaNCLFEXEqUoViA3rc32o_sVQ,7623
|
|
192
|
+
src/linters/stringly_typed/__init__.py,sha256=6r4IIykZ6mm551KQpRTSDp418EFqJQbuzjSfLHcwyBc,1511
|
|
193
|
+
src/linters/stringly_typed/config.py,sha256=-M7fwwr9axQsQcGtowVINC9Bh1cS1b2-KPxFb2GtL3M,7500
|
|
194
|
+
src/linters/stringly_typed/context_filter.py,sha256=JohTFvXiHKfVzUowRbsDrY37QngJDmhFfoxyoTzKriY,11422
|
|
195
|
+
src/linters/stringly_typed/function_call_violation_builder.py,sha256=RiuzeKmUzb6Fzdc4j8lXl4V-jf-0xae-5t7YcIaKTMY,4234
|
|
196
|
+
src/linters/stringly_typed/ignore_checker.py,sha256=QU1x3S6RVujmnIWMTKWD4bwSfrmPLLRBp36T2KD_o1g,3382
|
|
197
|
+
src/linters/stringly_typed/ignore_utils.py,sha256=hw0wfnGFJQkysr1qi_vmykZPr02SNBElwVHFu55tB6M,1531
|
|
198
|
+
src/linters/stringly_typed/linter.py,sha256=mKokag3XCQl4QuhT25sekuiX2bMERDUdq9SNxqBpNCw,13440
|
|
199
|
+
src/linters/stringly_typed/python/__init__.py,sha256=y1ELj3We0_VeA0ygXd1DxudSWrZE5OhLGtZNkKwuomA,1359
|
|
200
|
+
src/linters/stringly_typed/python/analyzer.py,sha256=HAhSAMIXMr4FoSKE9ovrWuB0f3Zjp9Py3AoruArmaOU,12247
|
|
201
|
+
src/linters/stringly_typed/python/call_tracker.py,sha256=Re_BgUQQhWNTg9jM6XsyyqYxmeVhoqVJXPe2ITcNhhA,6046
|
|
202
|
+
src/linters/stringly_typed/python/comparison_tracker.py,sha256=MAYQF-IKYaJLV4DYwbAPz8E2fWFBoSMTxhCwnGFP5Jw,8384
|
|
203
|
+
src/linters/stringly_typed/python/condition_extractor.py,sha256=_Y-lSqmqfUYbJjmSjOcQDetCNwWvW6bAAdyHjRSVAek,4222
|
|
204
|
+
src/linters/stringly_typed/python/conditional_detector.py,sha256=js1wTcXwLOrHVAJY9dq0xqXVZVNXh5FSFQNvIZ4SUtg,6006
|
|
205
|
+
src/linters/stringly_typed/python/constants.py,sha256=IF3Y2W96hihHlr5HMenq5Q93uOo7KHzNazVVvhq3E58,671
|
|
206
|
+
src/linters/stringly_typed/python/match_analyzer.py,sha256=mgarAtnL79iOrK6xuiRE2Hw-9tR8ocrIRza6g0SorY8,2719
|
|
207
|
+
src/linters/stringly_typed/python/validation_detector.py,sha256=jzcowBcA7R_aKeXFf2sxI2yGGUoT1lGj1y7DTnmO88M,6288
|
|
208
|
+
src/linters/stringly_typed/python/variable_extractor.py,sha256=yYJQ5jTSMz94SD_0IMfCHMWcw1F57GmRuh9h51oiAEs,2769
|
|
209
|
+
src/linters/stringly_typed/storage.py,sha256=4ymgg1JiBPLUazKShOb6djPGAVSma3SOIUDmOmeqH5A,21742
|
|
210
|
+
src/linters/stringly_typed/storage_initializer.py,sha256=3-4St1ieN8325Xkb0HTS27dVyjjluM_X-bkwOfJW1JM,1548
|
|
211
|
+
src/linters/stringly_typed/typescript/__init__.py,sha256=lOgclS9wxLNyszfwVGbVxKfCkbTLX1pvskHzcADi5Xg,1121
|
|
212
|
+
src/linters/stringly_typed/typescript/analyzer.py,sha256=iNEk6wQJJfmJoRTXx29GEeqTpKzQ5TcNIimSuQPb6UU,6376
|
|
213
|
+
src/linters/stringly_typed/typescript/call_tracker.py,sha256=NPRpjqTe-Owi3_qJk_baojAazqaL6EsH4E2SIOsUAjU,11299
|
|
214
|
+
src/linters/stringly_typed/typescript/comparison_tracker.py,sha256=TiEldIqppu6i2XYd9a040HK0U4cy7IFf6Qjjlb93wAA,12573
|
|
215
|
+
src/linters/stringly_typed/violation_generator.py,sha256=g1dTc6EvjvTYmW3zdfTydmLaTCnqWDq4Q5UIntYxF1A,15336
|
|
216
|
+
src/orchestrator/__init__.py,sha256=XXLDJq2oaB-TpP2Y97GRnde9EkITGuFCmuLrDfxI9nY,245
|
|
217
|
+
src/orchestrator/core.py,sha256=rt3h-YFgF1aAFeKvTa0PP7k_8zfwpeGIqrIxKuyckxY,17683
|
|
218
|
+
src/orchestrator/language_detector.py,sha256=ALt2BEZKXQM2dWr1ChF9lZVj83YF4Bl9xwrB9ezfmMc,2799
|
|
219
|
+
src/templates/thailint_config_template.yaml,sha256=57ZtLxnIoOHtR5Ejq3clb4nhY9J4n6h36XFb79ZZPlc,12020
|
|
220
|
+
src/utils/__init__.py,sha256=NiBtKeQ09Y3kuUzeN4O1JNfUIYPQDS2AP1l5ODq-Dec,125
|
|
221
|
+
src/utils/project_root.py,sha256=aaxUM-LQ1okrPClmZWPFd_D09W3V1ArgJiidEEp_eU8,6262
|
|
222
|
+
thailint-0.15.3.dist-info/METADATA,sha256=ARqaTSsuA3wy3qHEDuxB3F5fxddwATw4A9y_DNRYfX8,7202
|
|
223
|
+
thailint-0.15.3.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
|
|
224
|
+
thailint-0.15.3.dist-info/entry_points.txt,sha256=DNoGUlxpaMFqxQDgHp1yeGqohOjdFR-kH19uHYi3OUY,72
|
|
225
|
+
thailint-0.15.3.dist-info/licenses/LICENSE,sha256=kxh1J0Sb62XvhNJ6MZsVNe8PqNVJ7LHRn_EWa-T3djw,1070
|
|
226
|
+
thailint-0.15.3.dist-info/RECORD,,
|