clean-code-tools 1.0.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.
- package/README.md +66 -0
- package/configs/eslint.clean-code.recommended.mjs +211 -0
- package/configs/python.clean-code.pyproject.toml +143 -0
- package/data/clean-code-patterns.jsonl +264 -0
- package/data/vector-record.schema.json +77 -0
- package/docs/README.md +29 -0
- package/docs/eslint-custom-rules.md +74 -0
- package/docs/eslint-recommended-config.md +87 -0
- package/docs/fastmcp-local-server.md +104 -0
- package/docs/publishing.md +125 -0
- package/docs/python-lint-recommended-config.md +57 -0
- package/docs/python-pylint-custom-rules.md +77 -0
- package/docs/semantic-weaviate.md +80 -0
- package/docs/static-trigger-semantic-review.md +97 -0
- package/evals/clean-code-retrieval.jsonl +13 -0
- package/ops/dev/weaviate/README.md +34 -0
- package/ops/dev/weaviate/compose.yaml +34 -0
- package/ops/dev/weaviate/smoke.sh +28 -0
- package/package.json +96 -0
- package/pyproject.toml +303 -0
- package/sample-apps/README.md +40 -0
- package/sample-apps/python-app/pyproject.toml +113 -0
- package/sample-apps/python-app/src/clean_pricing.py +10 -0
- package/sample-apps/python-app/src/smelly_pricing.py +8 -0
- package/sample-apps/ts-backend/eslint.config.mjs +3 -0
- package/sample-apps/ts-backend/package.json +18 -0
- package/sample-apps/ts-backend/src/clean-handler.ts +19 -0
- package/sample-apps/ts-backend/src/smelly-handler.ts +29 -0
- package/sample-apps/ts-backend/tsconfig.json +9 -0
- package/sample-apps/ts-frontend/eslint.config.mjs +3 -0
- package/sample-apps/ts-frontend/package.json +18 -0
- package/sample-apps/ts-frontend/src/CleanWidget.tsx +18 -0
- package/sample-apps/ts-frontend/src/SmellyWidget.tsx +27 -0
- package/sample-apps/ts-frontend/tsconfig.json +10 -0
- package/scripts/_mcp_app.py +21 -0
- package/scripts/check_clean_code_review_candidates.py +302 -0
- package/scripts/check_fastmcp_server.py +106 -0
- package/scripts/check_packages.py +137 -0
- package/scripts/check_python_config.py +130 -0
- package/scripts/check_repo_python_lint.py +46 -0
- package/scripts/check_retrieval_evals.py +132 -0
- package/scripts/check_sample_apps.py +169 -0
- package/scripts/check_semantic_search_tooling.py +102 -0
- package/scripts/clean_code_eslint_triggers.py +272 -0
- package/scripts/clean_code_mcp_server.py +7 -0
- package/scripts/clean_code_python_triggers.py +318 -0
- package/scripts/clean_code_review_candidates.py +291 -0
- package/scripts/clean_code_review_io.py +36 -0
- package/scripts/clean_code_review_models.py +43 -0
- package/scripts/clean_code_semantic.py +27 -0
- package/scripts/set_package_versions.py +82 -0
- package/scripts/weaviate_ingest_clean_code.py +44 -0
- package/scripts/weaviate_search_clean_code.py +51 -0
- package/skills/clean-code-mcp-reviewer/SKILL.md +209 -0
- package/skills/clean-code-mcp-reviewer/evals/evals.json +30 -0
- package/src/js/eslint-plugin-clean-code.mjs +758 -0
- package/src/python/clean_code_tools_pylint/__init__.py +14 -0
- package/src/python/clean_code_tools_pylint/ast_checker.py +122 -0
- package/src/python/clean_code_tools_pylint/comments.py +83 -0
- package/src/python/clean_code_tools_pylint/helpers.py +196 -0
- package/src/python/mcp_server/__init__.py +1 -0
- package/src/python/mcp_server/corpus.py +160 -0
- package/src/python/mcp_server/markdown.py +126 -0
- package/src/python/mcp_server/models.py +73 -0
- package/src/python/mcp_server/ranking.py +125 -0
- package/src/python/mcp_server/ranking_scoring.py +232 -0
- package/src/python/mcp_server/semantic.py +192 -0
- package/src/python/mcp_server/server.py +235 -0
- package/src/python/mcp_server/server_payloads.py +83 -0
- package/src/python/mcp_server/text.py +104 -0
- package/src/python/mcp_server/utils/__init__.py +1 -0
- package/src/python/mcp_server/utils/httpx_loader.py +14 -0
- package/src/python/mcp_server/utils/increment.py +7 -0
- package/src/python/mcp_server/utils/sha256_text.py +8 -0
- package/src/python/mcp_server/utils/unique_strings.py +15 -0
- package/src/python/mcp_server/weaviate.py +182 -0
- package/uv.lock +2012 -0
package/README.md
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Clean Code Tools
|
|
2
|
+
|
|
3
|
+
This repository contains clean-code lint packages, a local MCP server for
|
|
4
|
+
pattern lookup, and the production clean-code pattern corpus.
|
|
5
|
+
|
|
6
|
+
Start with [docs/README.md](docs/README.md) for the documentation index.
|
|
7
|
+
|
|
8
|
+
For vector database ingestion, use `data/clean-code-patterns.jsonl`. It contains
|
|
9
|
+
264 records with aliases, problem statements, use/avoid guidance, good and bad
|
|
10
|
+
examples, lintability, and embedding/display text. The expected record shape is
|
|
11
|
+
documented in `data/vector-record.schema.json`.
|
|
12
|
+
|
|
13
|
+
Suggested vector metadata fields:
|
|
14
|
+
|
|
15
|
+
- `id`
|
|
16
|
+
- `topic`
|
|
17
|
+
- `language`
|
|
18
|
+
- `title`
|
|
19
|
+
- `description`
|
|
20
|
+
- `lint_candidates`
|
|
21
|
+
|
|
22
|
+
## Local MCP
|
|
23
|
+
|
|
24
|
+
This repo includes a uv-backed FastMCP server in `src/python/mcp_server` for local
|
|
25
|
+
clean-code pattern search.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
uv sync
|
|
29
|
+
bun run weaviate:dev:start
|
|
30
|
+
bun run semantic:ingest -- --reset
|
|
31
|
+
bun run mcp:http
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Useful checks:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
bun run check:fastmcp
|
|
38
|
+
bun run check:retrieval-evals
|
|
39
|
+
bun run check
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The agent-facing tools are documented in `docs/fastmcp-local-server.md`.
|
|
43
|
+
|
|
44
|
+
## Static Triggers to Semantic Review
|
|
45
|
+
|
|
46
|
+
Use deterministic lint output as the first pass, then hand selected
|
|
47
|
+
maintainability tripwires to an agent or MCP-backed review:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
bun run clean-code:candidates -- \
|
|
51
|
+
--pylint-command "uv run --group lint pylint src/python/mcp_server --output-format=json" \
|
|
52
|
+
--ruff-command "uv run --group lint ruff check src/python/mcp_server --output-format=json"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The workflow and `clean-code-review-candidates/v1` schema are documented in
|
|
56
|
+
`docs/static-trigger-semantic-review.md`.
|
|
57
|
+
|
|
58
|
+
## Packages
|
|
59
|
+
|
|
60
|
+
The ESLint plugin/config is distributed through npm, and the Python Pylint
|
|
61
|
+
plugin/config is distributed through PyPI. Packaging checks are documented in
|
|
62
|
+
`docs/publishing.md` and run through:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
bun run check:packages
|
|
66
|
+
```
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import js from "@eslint/js";
|
|
2
|
+
import sonarjs from "eslint-plugin-sonarjs";
|
|
3
|
+
import unicorn from "eslint-plugin-unicorn";
|
|
4
|
+
import tseslint from "typescript-eslint";
|
|
5
|
+
import cleanCode from "../src/js/eslint-plugin-clean-code.mjs";
|
|
6
|
+
|
|
7
|
+
const TEST_FILE_PATTERNS = [
|
|
8
|
+
"**/*.test.{js,jsx,ts,tsx}",
|
|
9
|
+
"**/*.spec.{js,jsx,ts,tsx}",
|
|
10
|
+
"**/__tests__/**/*.{js,jsx,ts,tsx}",
|
|
11
|
+
];
|
|
12
|
+
const TYPE_SCRIPT_FILE_PATTERNS = ["**/*.{ts,tsx,mts,cts}"];
|
|
13
|
+
|
|
14
|
+
function scopeToTypeScriptFiles(configs) {
|
|
15
|
+
return configs.map((config) => ({
|
|
16
|
+
...config,
|
|
17
|
+
files: TYPE_SCRIPT_FILE_PATTERNS,
|
|
18
|
+
}));
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export default tseslint.config(
|
|
22
|
+
{
|
|
23
|
+
ignores: [
|
|
24
|
+
"**/dist/**",
|
|
25
|
+
"**/build/**",
|
|
26
|
+
"**/coverage/**",
|
|
27
|
+
"**/.next/**",
|
|
28
|
+
"**/node_modules/**",
|
|
29
|
+
"**/*.d.ts",
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
js.configs.recommended,
|
|
33
|
+
...scopeToTypeScriptFiles(tseslint.configs.strictTypeChecked),
|
|
34
|
+
...scopeToTypeScriptFiles(tseslint.configs.stylisticTypeChecked),
|
|
35
|
+
{
|
|
36
|
+
files: TYPE_SCRIPT_FILE_PATTERNS,
|
|
37
|
+
languageOptions: {
|
|
38
|
+
parserOptions: {
|
|
39
|
+
projectService: true,
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
plugins: {
|
|
43
|
+
"clean-code": cleanCode,
|
|
44
|
+
sonarjs,
|
|
45
|
+
unicorn,
|
|
46
|
+
},
|
|
47
|
+
rules: {
|
|
48
|
+
// CC-033..CC-059, CC-137..CC-142, CC-206: keep units small enough to scan.
|
|
49
|
+
complexity: ["warn", { max: 10 }],
|
|
50
|
+
"max-depth": ["warn", 4],
|
|
51
|
+
"max-lines": [
|
|
52
|
+
"warn",
|
|
53
|
+
{
|
|
54
|
+
max: 300,
|
|
55
|
+
skipBlankLines: true,
|
|
56
|
+
skipComments: true,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
"max-lines-per-function": [
|
|
60
|
+
"warn",
|
|
61
|
+
{
|
|
62
|
+
max: 50,
|
|
63
|
+
skipBlankLines: true,
|
|
64
|
+
skipComments: true,
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
"max-params": ["warn", 4],
|
|
68
|
+
"sonarjs/cognitive-complexity": ["warn", 15],
|
|
69
|
+
|
|
70
|
+
// CC-043, CC-208, CC-224: discourage selector-style boolean modes.
|
|
71
|
+
"@typescript-eslint/strict-boolean-expressions": [
|
|
72
|
+
"warn",
|
|
73
|
+
{
|
|
74
|
+
allowString: false,
|
|
75
|
+
allowNumber: false,
|
|
76
|
+
allowNullableObject: false,
|
|
77
|
+
allowNullableBoolean: false,
|
|
78
|
+
allowNullableString: false,
|
|
79
|
+
allowNullableNumber: false,
|
|
80
|
+
allowAny: false,
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
|
|
84
|
+
// CC-018, CC-234: make policy values searchable.
|
|
85
|
+
"@typescript-eslint/no-magic-numbers": [
|
|
86
|
+
"warn",
|
|
87
|
+
{
|
|
88
|
+
ignore: [-1, 0, 1],
|
|
89
|
+
ignoreArrayIndexes: true,
|
|
90
|
+
ignoreDefaultValues: true,
|
|
91
|
+
ignoreEnums: true,
|
|
92
|
+
ignoreNumericLiteralTypes: true,
|
|
93
|
+
ignoreReadonlyClassProperties: true,
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
"sonarjs/no-duplicate-string": ["warn", { threshold: 5 }],
|
|
97
|
+
|
|
98
|
+
// CC-068, CC-083: use issue-tracked TODOs and do not park code in comments.
|
|
99
|
+
"no-warning-comments": "off",
|
|
100
|
+
|
|
101
|
+
// CC-071..CC-089: reduce noisy or misleading comment patterns.
|
|
102
|
+
"capitalized-comments": "off",
|
|
103
|
+
"lines-around-comment": "off",
|
|
104
|
+
"spaced-comment": [
|
|
105
|
+
"warn",
|
|
106
|
+
"always",
|
|
107
|
+
{
|
|
108
|
+
markers: ["/"],
|
|
109
|
+
exceptions: ["-", "+"],
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
"clean-code/no-commented-out-code": "warn",
|
|
113
|
+
"clean-code/no-noisy-comments": "warn",
|
|
114
|
+
"clean-code/no-redundant-comment": "warn",
|
|
115
|
+
"clean-code/todo-format": "warn",
|
|
116
|
+
|
|
117
|
+
// CC-160, CC-214: catch copy/paste branching before it becomes policy drift.
|
|
118
|
+
"sonarjs/no-duplicated-branches": "warn",
|
|
119
|
+
"sonarjs/no-identical-conditions": "warn",
|
|
120
|
+
"sonarjs/no-identical-functions": "warn",
|
|
121
|
+
|
|
122
|
+
// CC-237, CC-238: prefer readable predicates and positive branches.
|
|
123
|
+
"no-nested-ternary": "warn",
|
|
124
|
+
"no-negated-condition": "warn",
|
|
125
|
+
"sonarjs/no-inverted-boolean-check": "warn",
|
|
126
|
+
"unicorn/no-negated-condition": "warn",
|
|
127
|
+
"clean-code/no-business-policy-literals": "warn",
|
|
128
|
+
|
|
129
|
+
// CC-118, CC-119: avoid surprise nulls in codebases that prefer explicit absence.
|
|
130
|
+
"unicorn/no-null": "warn",
|
|
131
|
+
"@typescript-eslint/no-unnecessary-condition": "warn",
|
|
132
|
+
"@typescript-eslint/prefer-nullish-coalescing": "warn",
|
|
133
|
+
|
|
134
|
+
// CC-209, CC-218, CC-221: remove dead and redundant code.
|
|
135
|
+
"@typescript-eslint/no-unused-vars": [
|
|
136
|
+
"warn",
|
|
137
|
+
{
|
|
138
|
+
argsIgnorePattern: "^_",
|
|
139
|
+
caughtErrorsIgnorePattern: "^_",
|
|
140
|
+
varsIgnorePattern: "^_",
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
"no-empty": ["warn", { allowEmptyCatch: false }],
|
|
144
|
+
"no-useless-return": "warn",
|
|
145
|
+
"sonarjs/no-dead-store": "warn",
|
|
146
|
+
"clean-code/no-boolean-flag-arguments": "warn",
|
|
147
|
+
"clean-code/no-output-argument-mutation": "warn",
|
|
148
|
+
|
|
149
|
+
// CC-246: keep imports readable and dependency lists explicit.
|
|
150
|
+
"no-restricted-syntax": [
|
|
151
|
+
"warn",
|
|
152
|
+
{
|
|
153
|
+
selector: "ImportDeclaration[specifiers.length>10]",
|
|
154
|
+
message:
|
|
155
|
+
"Import lists with more than 10 specifiers are hard to scan; prefer a narrower module or namespace import when it matches local conventions.",
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
"clean-code/no-train-wrecks": "warn",
|
|
159
|
+
|
|
160
|
+
// CC-011, CC-025, CC-249..CC-255: enforce baseline naming consistency.
|
|
161
|
+
"@typescript-eslint/naming-convention": [
|
|
162
|
+
"warn",
|
|
163
|
+
{
|
|
164
|
+
selector: "variableLike",
|
|
165
|
+
format: ["camelCase", "PascalCase", "UPPER_CASE"],
|
|
166
|
+
leadingUnderscore: "allow",
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
selector: "typeLike",
|
|
170
|
+
format: ["PascalCase"],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
selector: "function",
|
|
174
|
+
format: ["camelCase", "PascalCase"],
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
selector: "variable",
|
|
178
|
+
types: ["boolean"],
|
|
179
|
+
format: ["PascalCase", "UPPER_CASE"],
|
|
180
|
+
prefix: ["is", "has", "can", "should", "will", "did"],
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
|
|
184
|
+
// General precision rules that support CC-235 and reduce avoidable ambiguity.
|
|
185
|
+
"@typescript-eslint/consistent-type-imports": [
|
|
186
|
+
"warn",
|
|
187
|
+
{
|
|
188
|
+
prefer: "type-imports",
|
|
189
|
+
fixStyle: "separate-type-imports",
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
"@typescript-eslint/no-confusing-void-expression": "warn",
|
|
193
|
+
"@typescript-eslint/no-floating-promises": "error",
|
|
194
|
+
"@typescript-eslint/no-misused-promises": "error",
|
|
195
|
+
"@typescript-eslint/no-unnecessary-type-assertion": "warn",
|
|
196
|
+
"@typescript-eslint/switch-exhaustiveness-check": "warn",
|
|
197
|
+
"eqeqeq": ["error", "always", { null: "ignore" }],
|
|
198
|
+
"unicorn/explicit-length-check": "warn",
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
files: TEST_FILE_PATTERNS,
|
|
203
|
+
rules: {
|
|
204
|
+
"@typescript-eslint/no-magic-numbers": "off",
|
|
205
|
+
"max-lines": "off",
|
|
206
|
+
"max-lines-per-function": "off",
|
|
207
|
+
"max-params": "off",
|
|
208
|
+
"sonarjs/no-identical-functions": "off",
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
);
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
[tool.ruff]
|
|
2
|
+
target-version = "py311"
|
|
3
|
+
line-length = 100
|
|
4
|
+
extend-exclude = [
|
|
5
|
+
".git",
|
|
6
|
+
".mypy_cache",
|
|
7
|
+
".nox",
|
|
8
|
+
".ruff_cache",
|
|
9
|
+
".tox",
|
|
10
|
+
".venv",
|
|
11
|
+
"__pycache__",
|
|
12
|
+
"build",
|
|
13
|
+
"dist",
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
[tool.ruff.lint]
|
|
17
|
+
# Ruff owns fast, mostly local checks: correctness, imports, upgrade safety,
|
|
18
|
+
# argument hygiene, commented code, TODO shape, return flow, and simple
|
|
19
|
+
# readability smells. Pylint owns broader design thresholds below.
|
|
20
|
+
select = [
|
|
21
|
+
"E",
|
|
22
|
+
"F",
|
|
23
|
+
"I",
|
|
24
|
+
"UP",
|
|
25
|
+
"B",
|
|
26
|
+
"C4",
|
|
27
|
+
"SIM",
|
|
28
|
+
"RET",
|
|
29
|
+
"ARG",
|
|
30
|
+
"ERA",
|
|
31
|
+
"TD",
|
|
32
|
+
"PLR2004",
|
|
33
|
+
"RUF",
|
|
34
|
+
]
|
|
35
|
+
ignore = [
|
|
36
|
+
# Formatter-compatible defaults.
|
|
37
|
+
"E501",
|
|
38
|
+
|
|
39
|
+
# Keep TODO enforcement useful but not hostile to teams that track work in
|
|
40
|
+
# project-specific systems. TD002/TD003 still require author/issue context.
|
|
41
|
+
"TD001",
|
|
42
|
+
]
|
|
43
|
+
fixable = [
|
|
44
|
+
"E",
|
|
45
|
+
"F",
|
|
46
|
+
"I",
|
|
47
|
+
"UP",
|
|
48
|
+
"B",
|
|
49
|
+
"C4",
|
|
50
|
+
"SIM",
|
|
51
|
+
"RET",
|
|
52
|
+
"ARG",
|
|
53
|
+
"RUF",
|
|
54
|
+
]
|
|
55
|
+
unfixable = [
|
|
56
|
+
"ERA",
|
|
57
|
+
"TD",
|
|
58
|
+
"PLR2004",
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
[tool.ruff.lint.isort]
|
|
62
|
+
known-first-party = []
|
|
63
|
+
combine-as-imports = true
|
|
64
|
+
split-on-trailing-comma = true
|
|
65
|
+
|
|
66
|
+
[tool.ruff.lint.per-file-ignores]
|
|
67
|
+
"tests/**/*.py" = [
|
|
68
|
+
"ARG001",
|
|
69
|
+
"ARG002",
|
|
70
|
+
"PLR2004",
|
|
71
|
+
"S101",
|
|
72
|
+
]
|
|
73
|
+
"**/__init__.py" = [
|
|
74
|
+
"F401",
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
[tool.pylint.main]
|
|
78
|
+
py-version = "3.11"
|
|
79
|
+
jobs = 0
|
|
80
|
+
recursive = true
|
|
81
|
+
load-plugins = [
|
|
82
|
+
"clean_code_tools_pylint",
|
|
83
|
+
]
|
|
84
|
+
ignore-paths = [
|
|
85
|
+
"^\\.venv/.*$",
|
|
86
|
+
"^build/.*$",
|
|
87
|
+
"^dist/.*$",
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
[tool.pylint."messages control"]
|
|
91
|
+
# Let Ruff own these categories to avoid duplicate reports. Pylint remains
|
|
92
|
+
# focused on design pressure, dependency shape, and semantic review signals.
|
|
93
|
+
disable = [
|
|
94
|
+
"all",
|
|
95
|
+
]
|
|
96
|
+
enable = [
|
|
97
|
+
"cyclic-import",
|
|
98
|
+
"clean-code-boolean-flag-argument",
|
|
99
|
+
"clean-code-business-policy-literal",
|
|
100
|
+
"clean-code-commented-out-code",
|
|
101
|
+
"clean-code-noisy-comment",
|
|
102
|
+
"clean-code-output-argument-mutation",
|
|
103
|
+
"clean-code-redundant-comment",
|
|
104
|
+
"clean-code-todo-format",
|
|
105
|
+
"clean-code-train-wreck",
|
|
106
|
+
"duplicate-code",
|
|
107
|
+
"import-error",
|
|
108
|
+
"too-many-ancestors",
|
|
109
|
+
"too-many-arguments",
|
|
110
|
+
"too-many-branches",
|
|
111
|
+
"too-many-instance-attributes",
|
|
112
|
+
"too-many-lines",
|
|
113
|
+
"too-many-locals",
|
|
114
|
+
"too-many-nested-blocks",
|
|
115
|
+
"too-many-public-methods",
|
|
116
|
+
"too-many-return-statements",
|
|
117
|
+
"too-many-statements",
|
|
118
|
+
"too-many-boolean-expressions",
|
|
119
|
+
"too-few-public-methods",
|
|
120
|
+
]
|
|
121
|
+
|
|
122
|
+
[tool.pylint.design]
|
|
123
|
+
max-args = 5
|
|
124
|
+
max-attributes = 7
|
|
125
|
+
max-bool-expr = 5
|
|
126
|
+
max-branches = 12
|
|
127
|
+
max-locals = 15
|
|
128
|
+
max-nested-blocks = 4
|
|
129
|
+
max-public-methods = 12
|
|
130
|
+
max-returns = 6
|
|
131
|
+
max-statements = 40
|
|
132
|
+
max-parents = 7
|
|
133
|
+
min-public-methods = 1
|
|
134
|
+
|
|
135
|
+
[tool.pylint.format]
|
|
136
|
+
max-line-length = 100
|
|
137
|
+
max-module-lines = 300
|
|
138
|
+
|
|
139
|
+
[tool.pylint.imports]
|
|
140
|
+
allow-any-import-level = []
|
|
141
|
+
|
|
142
|
+
[tool.pylint.reports]
|
|
143
|
+
score = false
|