@comate/zulu 1.4.0-beta.2 → 1.4.0-beta.4

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 (206) hide show
  1. package/comate-engine/assets/skills/auto-commit/SKILL.md +241 -0
  2. package/comate-engine/assets/skills/auto-commit/references/data_structures.md +183 -0
  3. package/comate-engine/assets/skills/auto-commit/references/interaction_instruction.md +220 -0
  4. package/comate-engine/assets/skills/auto-commit/references/issue_type_mapping.json +19 -0
  5. package/comate-engine/assets/skills/auto-commit/references/query_reference.md +176 -0
  6. package/comate-engine/assets/skills/auto-commit/scripts/build_git_commit_payload.py +195 -0
  7. package/comate-engine/assets/skills/auto-commit/scripts/build_icafe_cards_payload.py +80 -0
  8. package/comate-engine/assets/skills/auto-commit/scripts/cache_manager.py +69 -0
  9. package/comate-engine/assets/skills/auto-commit/scripts/create_card_cli.py +67 -0
  10. package/comate-engine/assets/skills/auto-commit/scripts/git_diff_cli.py +201 -0
  11. package/comate-engine/assets/skills/auto-commit/scripts/git_utils.py +230 -0
  12. package/comate-engine/assets/skills/auto-commit/scripts/icafe/__init__.py +66 -0
  13. package/comate-engine/assets/skills/auto-commit/scripts/icafe/client.py +473 -0
  14. package/comate-engine/assets/skills/auto-commit/scripts/icafe/farseer.py +52 -0
  15. package/comate-engine/assets/skills/auto-commit/scripts/icafe/matching.py +784 -0
  16. package/comate-engine/assets/skills/auto-commit/scripts/logger.py +32 -0
  17. package/comate-engine/assets/skills/auto-commit/scripts/match_card_cli.py +41 -0
  18. package/comate-engine/assets/skills/auto-commit/scripts/payload_validators.py +309 -0
  19. package/comate-engine/assets/skills/auto-commit/scripts/recognize_card_cli.py +63 -0
  20. package/comate-engine/assets/skills/{automation-browser-comate → automation-browser}/SKILL.md +1 -0
  21. package/comate-engine/assets/skills/{cnap-comate → cnap}/SKILL.md +1 -0
  22. package/comate-engine/assets/skills/code-review/SKILL.md +202 -0
  23. package/comate-engine/assets/skills/code-review/agents/correctness-reviewer.md +62 -0
  24. package/comate-engine/assets/skills/code-review/agents/custom-reviewer.md +53 -0
  25. package/comate-engine/assets/skills/code-review/agents/meta-reviewer.md +84 -0
  26. package/comate-engine/assets/skills/code-review/agents/reliability-reviewer.md +72 -0
  27. package/comate-engine/assets/skills/code-review/agents/reuse-reviewer.md +101 -0
  28. package/comate-engine/assets/skills/code-review/agents/style-reviewer.md +65 -0
  29. package/comate-engine/assets/skills/code-review/evals/SKILL.md +334 -0
  30. package/comate-engine/assets/skills/code-review/evals/agents/gt-generator.md +76 -0
  31. package/comate-engine/assets/skills/code-review/evals/agents/miner.md +87 -0
  32. package/comate-engine/assets/skills/code-review/evals/agents/score-judge.md +168 -0
  33. package/comate-engine/assets/skills/code-review/evals/references/cli-query-template.md +114 -0
  34. package/comate-engine/assets/skills/code-review/evals/references/gt-schema.md +77 -0
  35. package/comate-engine/assets/skills/code-review/references/custom-rules/RULE_TEMPLATE.md +141 -0
  36. package/comate-engine/assets/skills/code-review/references/dispatch-template.md +142 -0
  37. package/comate-engine/assets/skills/code-review/references/output-schema.md +197 -0
  38. package/comate-engine/assets/skills/code-review/references/report-format.md +41 -0
  39. package/comate-engine/assets/skills/code-review/references/rules/Go/GO_AUTH_RULES.md +29 -0
  40. package/comate-engine/assets/skills/code-review/references/rules/Go/GO_CORRECTNESS_RULES.md +111 -0
  41. package/comate-engine/assets/skills/code-review/references/rules/Go/GO_RESOURCE_CONCURRENCY_RULES.md +190 -0
  42. package/comate-engine/assets/skills/code-review/references/rules/Go/GO_STYLE_RULES.md +354 -0
  43. package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_AUTH_RULES.md +34 -0
  44. package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_CORRECTNESS_RULES.md +207 -0
  45. package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_RESOURCE_CONCURRENCY_RULES.md +220 -0
  46. package/comate-engine/assets/skills/code-review/references/rules/Java/JAVA_STYLE_RULES.md +306 -0
  47. package/comate-engine/assets/skills/code-review/references/rules/Js/JS_AUTH_RULES.md +48 -0
  48. package/comate-engine/assets/skills/code-review/references/rules/Js/JS_CORRECTNESS_RULES.md +364 -0
  49. package/comate-engine/assets/skills/code-review/references/rules/Js/JS_RESOURCE_CONCURRENCY_RULES.md +180 -0
  50. package/comate-engine/assets/skills/code-review/references/rules/Js/JS_STYLE_RULES.md +350 -0
  51. package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_AUTH_RULES.md +38 -0
  52. package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_CORRECTNESS_RULES.md +255 -0
  53. package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_RESOURCE_CONCURRENCY_RULES.md +180 -0
  54. package/comate-engine/assets/skills/code-review/references/rules/Python/PYTHON_STYLE_RULES.md +195 -0
  55. package/comate-engine/assets/skills/code-review/references/telemetry.md +27 -0
  56. package/comate-engine/assets/skills/{code-security-comate → code-security}/SKILL.md +1 -0
  57. package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/SKILL.md +1 -1
  58. package/comate-engine/assets/skills/create-automation-tasks-comate/SKILL.md +300 -0
  59. package/comate-engine/assets/skills/create-automation-tasks-comate/references/backend_dev.md +109 -0
  60. package/comate-engine/assets/skills/create-automation-tasks-comate/references/env_setup.md +130 -0
  61. package/comate-engine/assets/skills/create-automation-tasks-comate/references/frontend_dev.md +74 -0
  62. package/comate-engine/assets/skills/create-automation-tasks-comate/references/git_operations.md +88 -0
  63. package/comate-engine/assets/skills/create-automation-tasks-comate/references/long_running_task.md +96 -0
  64. package/comate-engine/assets/skills/create-automation-tasks-comate/references/testing_strategy.md +94 -0
  65. package/comate-engine/assets/skills/create-automation-tasks-comate/scripts/check_config.py +397 -0
  66. package/comate-engine/assets/skills/{create-image-comate → create-image}/SKILL.md +14 -9
  67. package/comate-engine/assets/skills/{create-rule-comate → create-rule}/SKILL.md +1 -0
  68. package/comate-engine/assets/skills/{create-skill-comate → create-skill}/SKILL.md +2 -3
  69. package/comate-engine/assets/skills/{figma2code-comate → figma2code}/SKILL.md +1 -0
  70. package/comate-engine/assets/skills/{get-ugate-token-comate → get-ugate-token}/SKILL.md +97 -13
  71. package/comate-engine/assets/skills/get-ugate-token/getUgateToken.py +244 -0
  72. package/comate-engine/assets/skills/{icafe-comate → icafe}/SKILL.md +1 -13
  73. package/comate-engine/assets/skills/{icode-comate → icode}/SKILL.md +1 -0
  74. package/comate-engine/fallbackServer.js +1 -1
  75. package/comate-engine/node_modules/@baidu/comate-browser-use/dist/launch-chrome/index.js +1 -1
  76. package/comate-engine/node_modules/@baidu/comate-browser-use/package.json +5 -5
  77. package/comate-engine/node_modules/@comate/plugin-shared-internals/dist/index.js +3 -3
  78. package/comate-engine/package.json +1 -1
  79. package/comate-engine/server.js +137 -77
  80. package/dist/bundle/index.js +20 -9
  81. package/package.json +1 -1
  82. package/comate-engine/assets/skills/get-ugate-token-comate/getUgateToken.py +0 -150
  83. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/cases.md +0 -0
  84. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/deploy-troubleshoot.md +0 -0
  85. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/install.md +0 -0
  86. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/kubectl.md +0 -0
  87. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/login.md +0 -0
  88. /package/comate-engine/assets/skills/{cnap-comate → cnap}/references/oncall.md +0 -0
  89. /package/comate-engine/assets/skills/{cnap-comate → cnap}/scripts/install_cnap_cli.sh +0 -0
  90. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/credential_hosting.md +0 -0
  91. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-go_sql_injection.md +0 -0
  92. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-java_sql_injection.md +0 -0
  93. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-php_sql_injection.md +0 -0
  94. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair-python_sql_injection.md +0 -0
  95. /package/comate-engine/assets/skills/{code-security-comate → code-security}/references/vul_repair_sensitive.md +0 -0
  96. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/credential_hosting.py +0 -0
  97. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/credential_poll.py +0 -0
  98. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/http_client.py +0 -0
  99. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/parse_scan_result.py +0 -0
  100. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/repair_vulnerability.py +0 -0
  101. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/report_chat.py +0 -0
  102. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/scan_vulnerability.py +0 -0
  103. /package/comate-engine/assets/skills/{code-security-comate → code-security}/scripts/utils.py +0 -0
  104. /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/doc-map-extended.md +0 -0
  105. /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/models-and-billing.md +0 -0
  106. /package/comate-engine/assets/skills/{comate-docs-comate → comate-docs}/references/product-overview.md +0 -0
  107. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/LICENSE.txt +0 -0
  108. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/analyzer.md +0 -0
  109. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/comparator.md +0 -0
  110. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/agents/grader.md +0 -0
  111. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/assets/eval_review.html +0 -0
  112. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/eval-viewer/generate_review.py +0 -0
  113. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/eval-viewer/viewer.html +0 -0
  114. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/references/schemas.md +0 -0
  115. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__init__.py +0 -0
  116. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
  117. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/__pycache__/aggregate_benchmark.cpython-311.pyc +0 -0
  118. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/aggregate_benchmark.py +0 -0
  119. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/generate_report.py +0 -0
  120. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/package_skill.py +0 -0
  121. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/quick_validate.py +0 -0
  122. /package/comate-engine/assets/skills/{create-skill-comate → create-skill}/scripts/utils.py +0 -0
  123. /package/comate-engine/assets/skills/{create-subagent-comate → create-subagent}/SKILL.md +0 -0
  124. /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/codeConnect.md +0 -0
  125. /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/designToken.md +0 -0
  126. /package/comate-engine/assets/skills/{figma2code-comate → figma2code}/references/image2design.md +0 -0
  127. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/SKILL.md +0 -0
  128. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/fetch_skills.py +0 -0
  129. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/get_download_url.py +0 -0
  130. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/install_skill.py +0 -0
  131. /package/comate-engine/assets/skills/{find-skills-comate → find-skills}/scripts/preview_skill.py +0 -0
  132. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/ai-workflows.md +0 -0
  133. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/commands.md +0 -0
  134. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/error-handling.md +0 -0
  135. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/git-auto-bindcard-workflow.md +0 -0
  136. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/git-bindcard-workflow.md +0 -0
  137. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/iql-syntax.md +0 -0
  138. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/platform-concepts.md +0 -0
  139. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-create-workflow.md +0 -0
  140. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-find-workflow.md +0 -0
  141. /package/comate-engine/assets/skills/{icafe-comate → icafe}/references/smart-update-workflow.md +0 -0
  142. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/add_reviewers.md +0 -0
  143. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/build_fetch_command.md +0 -0
  144. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/check_repo_permission.md +0 -0
  145. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/create_branch.md +0 -0
  146. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/create_draft_comment.md +0 -0
  147. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_ai_cr_result.md +0 -0
  148. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_ai_review.md +0 -0
  149. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_diff_content.md +0 -0
  150. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_diff_file.md +0 -0
  151. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_machine_check.md +0 -0
  152. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_my_reviews.md +0 -0
  153. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_person_commit.md +0 -0
  154. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_person_repo.md +0 -0
  155. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_branch.md +0 -0
  156. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_config.md +0 -0
  157. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_members.md +0 -0
  158. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_repo_reviews.md +0 -0
  159. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_review_comments.md +0 -0
  160. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_review_info.md +0 -0
  161. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/get_submit_settings.md +0 -0
  162. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/icode-api.md +0 -0
  163. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/publish_comments.md +0 -0
  164. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/set_review_score.md +0 -0
  165. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/start_ai_review.md +0 -0
  166. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/submit_review.md +0 -0
  167. /package/comate-engine/assets/skills/{icode-comate → icode}/references/api/trigger_ai_cr.md +0 -0
  168. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/add-reviewer.md +0 -0
  169. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/fix-machine-check.md +0 -0
  170. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/merge-cr.md +0 -0
  171. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/ssh-setup.md +0 -0
  172. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/submit-acr.md +0 -0
  173. /package/comate-engine/assets/skills/{icode-comate → icode}/references/feature/submit-cr.md +0 -0
  174. /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/clone.md +0 -0
  175. /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/icode-git.md +0 -0
  176. /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/push.md +0 -0
  177. /package/comate-engine/assets/skills/{icode-comate → icode}/references/git/push_cr.md +0 -0
  178. /package/comate-engine/assets/skills/{icode-comate → icode}/references/install.md +0 -0
  179. /package/comate-engine/assets/skills/{icode-comate → icode}/references/login.md +0 -0
  180. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/add-reviewer.sh +0 -0
  181. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/common.sh +0 -0
  182. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/fix-machine-check.sh +0 -0
  183. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/merge-cr.sh +0 -0
  184. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/ssh-setup.sh +0 -0
  185. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/submit-acr.sh +0 -0
  186. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/submit-cr.sh +0 -0
  187. /package/comate-engine/assets/skills/{icode-comate → icode}/scripts/test-preflight.sh +0 -0
  188. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/SKILL.md +0 -0
  189. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/examples.md +0 -0
  190. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/add_member.md +0 -0
  191. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/change_scope.md +0 -0
  192. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/copy_doc.md +0 -0
  193. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/create_doc.md +0 -0
  194. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/delete_doc.md +0 -0
  195. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/edit_content.md +0 -0
  196. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/move_doc.md +0 -0
  197. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_comment.md +0 -0
  198. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_content.md +0 -0
  199. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_flowchart.md +0 -0
  200. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_permission.md +0 -0
  201. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_recent_view.md +0 -0
  202. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_repo.md +0 -0
  203. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/query_user_info.md +0 -0
  204. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/update_member.md +0 -0
  205. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/references/upload_attachment.md +0 -0
  206. /package/comate-engine/assets/skills/{ku-operator-comate → ku-operator}/scripts/ku_operator.py +0 -0
@@ -0,0 +1,350 @@
1
+ # JavaScript/TypeScript 规范类规则
2
+
3
+ 格式与代码风格规则,来源于 JAVASCRIPT_SMELL_LIST_details.md(共35条)。
4
+
5
+ ---
6
+
7
+ ### JS 通用规则
8
+
9
+ #### 1. no-trailing-spaces - 禁止行尾空白 [Critical]
10
+ **描述**:不允许在行尾出现空白字符(空格或制表符)。
11
+
12
+ #### 2. quotes - 引号风格 [Critical]
13
+ **描述**:强制使用单引号(`'`),只有在字符串本身包含单引号时才允许使用双引号转义。
14
+
15
+ ```javascript
16
+ // 错误写法
17
+ const str = "hello";
18
+ const msg = "it's a test";
19
+
20
+ // 正确写法
21
+ const str = 'hello';
22
+ const msg = 'it\'s a test';
23
+ ```
24
+
25
+ #### 3. semi - 分号要求 [Critical]
26
+ **描述**:要求每条语句后面必须使用分号(`;`)结尾。
27
+
28
+ #### 4. max-len - 行长度限制 [Critical]
29
+ **描述**:每行代码不得超过120个字符(URL除外)。
30
+
31
+ #### 5. curly - 花括号要求 [Critical]
32
+ **描述**:所有控制语句(`if`、`else`、`for`、`while`、`do`)都必须使用花括号包裹语句体,即使只有一行代码。
33
+
34
+ ```javascript
35
+ // 错误写法
36
+ if (condition) doSomething();
37
+ for (let i = 0; i < 10; i++) console.log(i);
38
+
39
+ // 正确写法
40
+ if (condition) {
41
+ doSomething();
42
+ }
43
+ for (let i = 0; i < 10; i++) {
44
+ console.log(i);
45
+ }
46
+ ```
47
+
48
+ #### 6. comma-dangle - 尾逗号规则 [Critical]
49
+ **描述**:多行数组、对象、导入、导出必须使用尾逗号;函数参数不允许使用尾逗号。
50
+
51
+ ```javascript
52
+ // 错误写法 — 多行对象缺少尾逗号
53
+ const obj = {
54
+ a: 1,
55
+ b: 2
56
+ };
57
+
58
+ // 正确写法 — 多行必须有尾逗号
59
+ const obj = {
60
+ a: 1,
61
+ b: 2,
62
+ };
63
+
64
+ // 正确写法 — 单行无需尾逗号
65
+ const arr = [1, 2, 3];
66
+ ```
67
+
68
+ #### 7. no-multi-spaces - 禁止多个连续空格 [Critical]
69
+ **描述**:不允许在代码中出现多个连续的空格(行尾注释前的空格和对象属性对齐除外)。
70
+
71
+ #### 8. comma-spacing - 逗号空格 [Critical]
72
+ **描述**:逗号前不允许有空格,逗号后必须有一个空格。
73
+
74
+ ```javascript
75
+ // 错误写法
76
+ const arr = [1,2,3];
77
+ foo(1,2 ,3);
78
+
79
+ // 正确写法
80
+ const arr = [1, 2, 3];
81
+ foo(1, 2, 3);
82
+ ```
83
+
84
+ #### 9. space-infix-ops - 运算符空格 [Critical]
85
+ **描述**:二元运算符(`+`, `-`, `*`, `/`, `=`, `==`, `===`, `!=`, `!==`, `<`, `>`, `<=`, `>=` 等)两侧必须有空格。
86
+
87
+ ```javascript
88
+ // 错误写法
89
+ const x = 1+2*3;
90
+ if (a===b) {}
91
+
92
+ // 正确写法
93
+ const x = 1 + 2 * 3;
94
+ if (a === b) {}
95
+ ```
96
+
97
+ #### 10. space-before-function-paren - 函数括号前空格 [Critical]
98
+ **描述**:匿名函数(箭头函数、function表达式)的括号前必须有空格;命名函数声明的括号前不允许有空格。
99
+
100
+ ```javascript
101
+ // 错误写法
102
+ const foo = function() {}; // 匿名函数缺少空格
103
+ function test () {} // 命名函数多余空格
104
+
105
+ // 正确写法
106
+ const foo = function () {};
107
+ function test() {}
108
+ ```
109
+
110
+ #### 11. spaced-comment - 注释空格 [Critical]
111
+ **描述**:注释标记(`//` 或 `/*`)后必须有一个空格。
112
+
113
+ #### 12. key-spacing - 对象键空格 [Critical]
114
+ **描述**:对象字面量的冒号前不允许有空格,冒号后必须有一个空格。
115
+
116
+ ```javascript
117
+ // 错误写法
118
+ const obj = {a :1, b : 2};
119
+
120
+ // 正确写法
121
+ const obj = {a: 1, b: 2};
122
+ ```
123
+
124
+ #### 13. keyword-spacing - 关键字空格 [Critical]
125
+ **描述**:关键字(`if`, `else`, `for`, `while`, `do`, `switch`, `case`, `break`, `continue`, `return`, `try`, `catch`, `finally`, `throw`, `typeof`, `instanceof`, `new`, `delete`, `void`, `in`, `await`, `async` 等)前后必须有空格。
126
+
127
+ ```javascript
128
+ // 错误写法
129
+ if(condition) {}
130
+ for(let i = 0; i < 10; i++) {}
131
+
132
+ // 正确写法
133
+ if (condition) {}
134
+ for (let i = 0; i < 10; i++) {}
135
+ ```
136
+
137
+ #### 14. object-curly-spacing - 对象花括号空格 [Critical]
138
+ **描述**:对象字面量的花括号内部不允许有空格(使用 `never` 配置,`{a: 1}` 而非 `{ a: 1 }`)。
139
+
140
+ ```javascript
141
+ // 错误写法
142
+ const obj = { a: 1, b: 2 };
143
+
144
+ // 正确写法
145
+ const obj = {a: 1, b: 2};
146
+ ```
147
+
148
+ #### 15. dot-notation - 点号访问 [Critical]
149
+ **描述**:强制使用点号访问对象属性,仅当属性名包含特殊字符或使用变量时才允许使用方括号语法。
150
+
151
+ ```javascript
152
+ // 错误写法
153
+ const name = user['name'];
154
+
155
+ // 正确写法
156
+ const name = user.name;
157
+ const value = obj['special-key']; // 含特殊字符,允许方括号
158
+ const key = 'age';
159
+ const val = person[key]; // 动态变量,允许方括号
160
+ ```
161
+
162
+ #### 16. space-before-blocks - 代码块前空格 [Critical]
163
+ **描述**:代码块(`{}`)前必须有一个空格。
164
+
165
+ ```javascript
166
+ // 错误写法
167
+ if (condition){}
168
+ function test(){}
169
+
170
+ // 正确写法
171
+ if (condition) {}
172
+ function test() {}
173
+ ```
174
+
175
+ #### 17. arrow-parens - 箭头函数参数括号 [Critical]
176
+ **描述**:仅在需要时使用箭头函数参数的括号(单个参数时省略括号,零个或多个参数时保留括号)。
177
+
178
+ ```javascript
179
+ // 错误写法
180
+ const add = (a) => a + 1; // 单参数不应有括号
181
+
182
+ // 正确写法
183
+ const add = a => a + 1;
184
+ const sum = (a, b) => a + b;
185
+ const greet = () => 'Hello';
186
+ ```
187
+
188
+ #### 18. max-statements-per-line - 每行最多语句数 [Critical]
189
+ **描述**:每行只允许一条语句。
190
+
191
+ #### 19. eqeqeq - 严格相等比较 [Critical]
192
+ **描述**:必须使用严格相等(`===`)和严格不等(`!==`),禁止使用宽松相等(`==`)和不等(`!=`)。`null` 比较时忽略此规则。
193
+
194
+ ```javascript
195
+ // 错误写法
196
+ if (name == 'John') {}
197
+ if (count != 0) {}
198
+
199
+ // 正确写法
200
+ if (name === 'John') {}
201
+ if (count !== 0) {}
202
+ if (value == null) {} // null 比较时例外,允许同时匹配 null/undefined
203
+ ```
204
+
205
+ #### 20. operator-linebreak - 运算符换行 [Critical]
206
+ **描述**:运算符换行时,运算符必须放在行的开头(不是结尾)。
207
+
208
+ ```javascript
209
+ // 错误写法
210
+ const result = veryLongVariable +
211
+ anotherLongVariable;
212
+
213
+ // 正确写法
214
+ const result = veryLongVariable
215
+ + anotherLongVariable;
216
+ ```
217
+
218
+ #### 21. no-mixed-spaces-and-tabs - 禁止混用空格和Tab [Critical]
219
+ **描述**:不允许在缩进中混用空格和制表符(Tab)。
220
+
221
+ #### 22. arrow-spacing - 箭头函数箭头空格 [Critical]
222
+ **描述**:箭头函数的箭头(`=>`)前后必须各有一个空格。
223
+
224
+ ```javascript
225
+ // 错误写法
226
+ const add = (a, b)=>a + b;
227
+ const multiply = (x, y) =>x * y;
228
+
229
+ // 正确写法
230
+ const add = (a, b) => a + b;
231
+ ```
232
+
233
+ #### 23. no-confusing-arrow - 禁止混淆箭头函数 [Critical]
234
+ **描述**:禁止使用可能与比较运算符混淆的箭头函数(如 `x => x === y`),建议使用括号区分(如 `x => (x === 0)`)。
235
+
236
+ ```javascript
237
+ // 错误写法 — => 与比较运算符视觉上易混淆
238
+ const isZero = x => x === 0;
239
+ const isPositive = x => x > 0;
240
+
241
+ // 正确写法 — 加括号明确是箭头函数返回值
242
+ const isZero = x => (x === 0);
243
+ const isPositive = x => (x > 0);
244
+ ```
245
+
246
+ #### 24. radix - parseInt 必须指定基数 [Critical]
247
+ **描述**:使用 `parseInt()` 时必须指定第二个参数(基数),如 `parseInt('10', 10)`。
248
+
249
+ ```javascript
250
+ // 错误写法
251
+ const num = parseInt('10');
252
+
253
+ // 正确写法
254
+ const num = parseInt('10', 10);
255
+ const hex = parseInt('ff', 16);
256
+ ```
257
+
258
+ ---
259
+
260
+ ### Vue 规则
261
+
262
+ #### 25. vue/max-attributes-per-line - 每行最多属性数 [Critical]
263
+ **描述**:单行标签最多2个属性,多行标签每行最多2个属性。
264
+
265
+ ```html
266
+ <!-- 错误写法 — 超过2个属性未换行 -->
267
+ <MyComponent id="app" class="container" title="Hello" @click="handleClick" />
268
+
269
+ <!-- 正确写法 — 多属性时每行最多2个 -->
270
+ <MyComponent
271
+ id="app" class="container"
272
+ title="Hello" @click="handleClick"
273
+ />
274
+ ```
275
+
276
+ #### 26. vue/html-closing-bracket-newline - HTML闭合括号换行 [Critical]
277
+ **描述**:单行标签的闭合括号在同一行;多行标签的闭合括号单独占一行。
278
+
279
+ ```html
280
+ <!-- 错误写法 — 多行标签的 > 不应缩进在属性后 -->
281
+ <MyComponent
282
+ id="app"
283
+ class="container"
284
+ >
285
+
286
+ <!-- 正确写法 — 多行标签的 > 单独占一行顶格 -->
287
+ <MyComponent
288
+ id="app"
289
+ class="container"
290
+ >
291
+ ```
292
+
293
+ #### 27. vue/attribute-hyphenation - Vue属性命名 [Critical]
294
+ **描述**:自定义组件的属性名必须使用短横线命名法(kebab-case)。
295
+
296
+ ```html
297
+ <!-- 错误写法 -->
298
+ <MyComponent userName="John" maxCount="10" />
299
+
300
+ <!-- 正确写法 -->
301
+ <MyComponent user-name="John" max-count="10" />
302
+ ```
303
+
304
+ #### 28. vue/no-unused-refs - 禁止未使用的ref [Critical]
305
+ **描述**:禁止声明但未使用的 ref 引用。
306
+
307
+ #### 29. vue/mustache-interpolation-spacing - 插值空格 [Critical]
308
+ **描述**:Mustache 插值表达式中的花括号内部必须有单个空格(`{{ message }}`)。
309
+
310
+ #### 30. vue/no-unused-vars - 禁止未使用的v-for变量 [Critical]
311
+ **描述**:禁止在 `v-for` 中声明但未使用的变量。
312
+
313
+ #### 31. vue/no-multiple-template-root - 禁止多个模板根元素 [Critical]
314
+ **描述**:Vue 2 的模板只能有一个根元素;Vue 3 允许多个根元素但此规则强制要求单一根元素。
315
+
316
+ #### 32. vue/html-button-has-type - 按钮必须有type属性 [Critical]
317
+ **描述**:`<button>` 元素必须显式指定 `type` 属性(button/submit/reset)。
318
+
319
+ ---
320
+
321
+ ### React 规则
322
+
323
+ #### 33. react/jsx-indent - JSX缩进 [Critical]
324
+ **描述**:JSX 元素必须使用4个空格缩进。
325
+
326
+ ```jsx
327
+ // 错误写法(2空格)
328
+ <div>
329
+ <span>Text</span>
330
+ </div>
331
+
332
+ // 正确写法(4空格)
333
+ <div>
334
+ <span>Text</span>
335
+ </div>
336
+ ```
337
+
338
+ ---
339
+
340
+ ### San 规则
341
+
342
+ #### 34. san/html-indent - HTML缩进 [Critical]
343
+ **描述**:San 模板中的 HTML 元素使用4个空格缩进(配置:4空格,attribute: 1, baseIndent: 1, closeBracket: 0)。
344
+
345
+ ---
346
+
347
+ ### CSS 规则
348
+
349
+ #### 35. rule-empty-line-before - 规则前空行 [Critical]
350
+ **描述**:CSS 规则(选择器块)之间需要空行分隔。
@@ -0,0 +1,38 @@
1
+ # Python 接口鉴权规则
2
+
3
+ 检测对外接口的鉴权缺失与越权访问风险。
4
+
5
+ ---
6
+
7
+ ### AUTH_PY_01. 对外接口缺少鉴权 [high]
8
+ - **检测**:Flask/Django/FastAPI 路由定义无 `@login_required`/`@require_auth`/JWT 验证,且非公开接口
9
+ - **排除**:健康检查/登录/静态资源;全局中间件/装饰器统一鉴权
10
+
11
+ ### AUTH_PY_02. 越权访问 - 未校验资源归属 [high]
12
+ - **检测**:接口通过 request 参数获取资源 ID,未校验该资源是否属于当前登录用户
13
+ - **排除**:管理员接口有角色校验;公共资源
14
+
15
+ ### AUTH_PY_03. 身份校验逻辑错误 [high]
16
+ - **检测**:用 `==` 而非 `hmac.compare_digest` 等时序安全比较做 token 校验;校验变量来自请求参数而非已验证的会话
17
+
18
+ ```python
19
+ # 错误写法 — 普通 == 比较存在时序攻击风险,且变量来自请求
20
+ token = request.args.get('token')
21
+ if token == SECRET_TOKEN: ...
22
+
23
+ # 正确写法
24
+ import hmac
25
+ if hmac.compare_digest(token, SECRET_TOKEN): ...
26
+ ```
27
+
28
+ ### AUTH_PY_04. 鉴权中间件配置遗漏 [middle]
29
+ - **检测**:部分路由/蓝图未被鉴权中间件覆盖
30
+ - **排除**:有全局 before_request 统一鉴权
31
+
32
+ ### AUTH_PY_05. 垂直越权 - 敏感操作缺少角色校验 [high]
33
+ - **检测**:管理员级别操作缺少 `current_user.is_admin` 或权限校验
34
+ - **排除**:RBAC 中间件统一处理
35
+
36
+ ---
37
+
38
+ **通用排除**:健康检查/登录/Webhook;全局中间件;框架内置权限管理(Django permissions、FastAPI Dependencies)
@@ -0,0 +1,255 @@
1
+ # Python 正确性规则
2
+
3
+ 静态模式可识别的确定性错误,单次执行可触发。
4
+
5
+ ---
6
+
7
+ ## 一、空值与类型安全(7项)
8
+
9
+ ### CORRECTNESS_PY_01. 对 None 对象进行属性或方法调用 [Critical]
10
+ - **检测**:函数返回值可能为 None 时直接调用属性/方法,触发 `AttributeError`;`re.search()` 结果未判断
11
+ - **排除**:有 `if result:` 或 `if x is not None:` 检查
12
+
13
+ ### CORRECTNESS_PY_02. 空集合首元素访问 [Critical]
14
+ - **检测**:`users[0]` 在可能为空列表时;`min([])`/`max([])` 空集合;`first, *rest = []` 空列表解包
15
+ - **排除**:有 `if users:` 检查;有长度验证
16
+
17
+ ### CORRECTNESS_PY_03. 列表索引越界访问 [Critical]
18
+ - **检测**:`parts[2]` 等硬编码索引未校验长度;循环边界 `range(len(arr)+1)` 越界
19
+ - **排除**:有 `len()` 检查
20
+
21
+ ### CORRECTNESS_PY_04. 字典键不存在错误 [Critical]
22
+ - **检测**:`data["key"]` 直接访问可能不存在的键,触发 `KeyError`;`os.environ["KEY"]` 未配置时崩溃
23
+ - **排除**:已用 `.get(key, default)`;已有 `key in dict` 检查
24
+
25
+ ### CORRECTNESS_PY_05. 类型不匹配运算错误 [Critical]
26
+ - **检测**:字符串与数字拼接 `"text: " + count`;None 参与算术运算;列表与非列表 `+` 操作
27
+ - **排除**:有类型转换
28
+
29
+ ### CORRECTNESS_PY_06. 解包数量不匹配 [Critical]
30
+ - **检测**:`x, y, z = line.split(",")` 但分割结果可能不足3个;数据库行列数与解包变量数不一致
31
+ - **排除**:有长度检查;使用 `*rest` 弹性解包
32
+
33
+ ### CORRECTNESS_PY_07. 对 None 或非可迭代对象迭代 [Critical]
34
+ - **检测**:`for item in get_items()` 但函数可能返回 None;`for x in data.get("records")` 字段可能为 null
35
+ - **排除**:已用 `for item in (get_items() or [])` 等保护
36
+
37
+ ---
38
+
39
+ ## 二、数据结构操作错误(5项)
40
+
41
+ ### CORRECTNESS_PY_08. 可变对象作为函数默认参数 [Critical]
42
+ - **检测**:`def f(items=[])` 或 `def f(config={})` —— 默认参数共享同一对象,多次调用互相污染
43
+
44
+ ```python
45
+ def add_item(item, items=[]): # 错误:每次调用共享同一 items
46
+ items.append(item)
47
+ return items
48
+ # 正确:items=None,函数内 if items is None: items = []
49
+ ```
50
+
51
+ ### CORRECTNESS_PY_09. 迭代列表时修改列表 [Critical]
52
+ - **检测**:for-each 遍历时 `list.remove(item)` 或 `del list[i]`,导致跳过元素;迭代字典时 `del dict[key]` 抛 RuntimeError
53
+ - **排除**:用列表推导式/`removeIf` 等安全方式
54
+
55
+ ### CORRECTNESS_PY_10. 在哈希集合中使用可变对象 [Critical]
56
+ - **检测**:`set.add([1,2])` 或 `{[1]:v}` —— list/dict 不可哈希,触发 TypeError
57
+ - **排除**:已改用 tuple
58
+
59
+ ### CORRECTNESS_PY_11. 使用 is 比较数值/字符串 [Critical]
60
+ - **检测**:`if a is 1000:` —— is 比较内存地址,小整数池外返回 False,应用 `==`
61
+ - **排除**:`is None`/`is not None` 是正确用法
62
+
63
+ ### CORRECTNESS_PY_12. 闭包循环变量捕获陷阱 [Critical]
64
+ - **检测**:`[lambda: i for i in range(5)]` —— 所有 lambda 捕获同一变量引用,执行时都是最终值
65
+ - **排除**:已用默认参数固定值 `lambda i=i: i`
66
+
67
+ ```python
68
+ # 错误写法 — 全部输出 4
69
+ funcs = [lambda: i for i in range(5)]
70
+ print(funcs[0]()) # 4,不是 0
71
+
72
+ # 正确写法 — 用默认参数固定值
73
+ funcs = [lambda i=i: i for i in range(5)]
74
+ print(funcs[0]()) # 0
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 三、异常处理错误(6项)
80
+
81
+ ### CORRECTNESS_PY_13. 捕获所有异常隐藏真实错误 [Critical]
82
+ - **检测**:`except:` 裸异常或 `except Exception: pass` 吞掉所有错误,包括 KeyboardInterrupt;捕获后返回默认值隐藏错误
83
+ - **排除**:有充分日志;顶层框架兜底处理且已记录
84
+
85
+ ### CORRECTNESS_PY_14. 异常后资源未清理 [Critical]
86
+ - **检测**:`lock.acquire()` 后无 try-finally,异常时锁未释放
87
+ - **排除**:已用 `with` 上下文管理器
88
+
89
+ ### CORRECTNESS_PY_15. 静默忽略异常(except pass)[Critical]
90
+ - **检测**:`except SomeError: pass` 捕获后完全不处理,后续代码可能使用未定义变量
91
+
92
+ ### CORRECTNESS_PY_16. finally 中 return 覆盖异常 [Critical]
93
+ - **检测**:`finally: return None` 覆盖 try 块中抛出的异常,异常消失
94
+
95
+ ### CORRECTNESS_PY_17. JSON 序列化不支持的对象 [Critical]
96
+ - **检测**:`json.dumps` 包含 datetime/Decimal/自定义对象,触发 TypeError
97
+ - **排除**:有自定义 JSONEncoder;已序列化为基础类型
98
+
99
+ ### CORRECTNESS_PY_18. assert 用于业务逻辑校验 [Critical]
100
+ - **检测**:`assert amount > 0` 用于业务规则校验,Python -O 优化模式下 assert 被移除失效
101
+ - **排除**:assert 仅用于开发期内部不变式断言
102
+
103
+ ---
104
+
105
+ ## 四、静态检查:参数与变量错误(9项)
106
+
107
+ ### CORRECTNESS_PY_19. 访问未定义变量 [Critical]
108
+ - **检测**:使用了从未声明的变量名,触发 NameError;条件分支中部分路径未赋值就使用
109
+
110
+ ### CORRECTNESS_PY_20. 访问未赋值的局部变量 [Critical]
111
+ - **检测**:局部变量在 try/except 的 except 分支中未赋值就在函数末尾使用,触发 UnboundLocalError
112
+
113
+ ```python
114
+ # 错误写法 — except 分支没有给 result 赋值
115
+ def get_data():
116
+ try:
117
+ result = fetch()
118
+ except NetworkError:
119
+ log_error() # result 未赋值
120
+ return result # UnboundLocalError!
121
+
122
+ # 正确写法
123
+ def get_data():
124
+ result = None # 先赋初始值
125
+ try:
126
+ result = fetch()
127
+ except NetworkError:
128
+ log_error()
129
+ return result
130
+ ```
131
+
132
+ ### CORRECTNESS_PY_21. 调用函数时缺少必要参数 [Critical]
133
+ - **检测**:传入位置参数少于函数定义的必要参数数量,触发 TypeError
134
+
135
+ ### CORRECTNESS_PY_22. 调用函数时传递参数过多 [Critical]
136
+ - **检测**:传入位置参数多于函数定义的参数数量,触发 TypeError
137
+
138
+ ### CORRECTNESS_PY_23. 重复传递关键字参数 [Critical]
139
+ - **检测**:同一参数通过位置和关键字两种方式传递,触发 TypeError
140
+
141
+ ### CORRECTNESS_PY_24. 函数参数名重复定义 [Critical]
142
+ - **检测**:`def f(x, y, x)` 参数名重复,触发 SyntaxError
143
+
144
+ ### CORRECTNESS_PY_25. 实例方法缺少 self 参数 [Critical]
145
+ - **检测**:类中实例方法第一个参数(self)缺失,调用时触发 TypeError
146
+
147
+ ### CORRECTNESS_PY_26. __all__ 中引用未定义变量 [Critical]
148
+ - **检测**:`__all__` 列表包含模块中不存在的名称
149
+
150
+ ### CORRECTNESS_PY_27. 实例成员在赋值前被访问 [Critical]
151
+ - **检测**:`__init__` 中先调用方法再赋值属性,方法中访问了尚未赋值的 self 属性
152
+
153
+ ```python
154
+ # 错误写法 — setup() 访问 self.config,但此时尚未赋值
155
+ class Service:
156
+ def __init__(self):
157
+ self.setup() # setup 中访问 self.config
158
+ self.config = {} # 赋值在 setup 之后
159
+
160
+ def setup(self):
161
+ print(self.config) # AttributeError: 'Service' has no attribute 'config'
162
+
163
+ # 正确写法 — 先赋值再调用
164
+ class Service:
165
+ def __init__(self):
166
+ self.config = {}
167
+ self.setup()
168
+ ```
169
+
170
+ ---
171
+
172
+ ## 五、静态检查:格式化字符串(4项)
173
+
174
+ ### CORRECTNESS_PY_28. 格式化字符串参数过多/过少 [Critical]
175
+ - **检测**:`%` 格式化提供的参数个数与占位符数量不符,触发 TypeError
176
+
177
+ ### CORRECTNESS_PY_29. 不支持的格式化字符 [Critical]
178
+ - **检测**:`%q`/`%h` 等不受支持的格式符,触发 ValueError
179
+
180
+ ### CORRECTNESS_PY_30. 格式化字符串不完整 [Critical]
181
+ - **检测**:`"Value: %"` 格式符不完整,触发 ValueError
182
+
183
+ ### CORRECTNESS_PY_31. 对不支持下标访问的对象使用下标 [Critical]
184
+ - **检测**:对整数/None/set 使用 `[]`,触发 TypeError;`slice` 索引非整数触发 TypeError
185
+
186
+ ---
187
+
188
+ ## 六、静态检查:OOP 错误(5项)
189
+
190
+ ### CORRECTNESS_PY_32. 实例化抽象类 [Critical]
191
+ - **检测**:直接实例化含未实现抽象方法的 ABCMeta 类,触发 TypeError
192
+
193
+ ### CORRECTNESS_PY_33. 继承非类对象 [Critical]
194
+ - **检测**:继承函数/None/实例而非类,触发 TypeError
195
+
196
+ ### CORRECTNESS_PY_34. 类 MRO 解析顺序不一致 [Critical]
197
+ - **检测**:多重继承中基类顺序冲突,无法确定 MRO,触发 TypeError
198
+
199
+ ### CORRECTNESS_PY_35. 错误使用 NotImplemented 代替 NotImplementedError [Critical]
200
+ - **检测**:`raise NotImplemented` —— NotImplemented 是常量非异常,应用 `raise NotImplementedError`
201
+
202
+ ### CORRECTNESS_PY_36. break/continue 在循环外使用 [Critical]
203
+ - **检测**:`break`/`continue` 出现在函数体或模块顶层而非循环内,触发 SyntaxError
204
+
205
+ ---
206
+
207
+ ## 七、静态检查:控制流(3项)
208
+
209
+ ### CORRECTNESS_PY_37. return 在函数外使用 [Critical]
210
+ - **检测**:`return` 出现在模块级或类定义外,触发 SyntaxError;缩进错误导致 return 跑出方法
211
+
212
+ ### CORRECTNESS_PY_38. continue 在 finally 中使用 [Critical]
213
+ - **检测**:`finally: continue` 抑制异常(3.8+语法合法但语义危险);3.7及以下为 SyntaxError
214
+
215
+ ### CORRECTNESS_PY_39. except 捕获顺序不当 [Critical]
216
+ - **检测**:通用异常(Exception)在具体异常(ValueError)之前,导致具体处理永不执行
217
+
218
+ ---
219
+
220
+ ## 八、数据处理错误(2项)
221
+
222
+ ### CORRECTNESS_PY_40. 除零错误未处理 [Critical]
223
+ - **检测**:除法操作未检查除数为 0,触发 ZeroDivisionError
224
+ - **排除**:有 `if count != 0:` 检查;有 try-except ZeroDivisionError
225
+
226
+ ### CORRECTNESS_PY_41. 字符串编码解码错误 [Critical]
227
+ - **检测**:字节流按错误编码(如 utf-8 解码 GBK 数据),触发 UnicodeDecodeError
228
+ - **排除**:有 `errors='ignore'/'replace'` 参数;有编码检测
229
+
230
+ ---
231
+
232
+ ## 九、其他(1项)
233
+
234
+ ### CORRECTNESS_PY_42. __len__ 返回非负整数 [Critical]
235
+ - **检测**:`__len__` 方法返回负数、浮点数或 None,触发 ValueError/TypeError
236
+
237
+ ```python
238
+ # 错误写法 — 返回负数
239
+ class MyList:
240
+ def __len__(self):
241
+ return -1 # ValueError: __len__() should return >= 0
242
+
243
+ # 错误写法 — 返回浮点数
244
+ class MyList:
245
+ def __len__(self):
246
+ return 1.5 # TypeError: 'float' object cannot be interpreted as an integer
247
+
248
+ # 正确写法
249
+ class MyList:
250
+ def __init__(self):
251
+ self._items = []
252
+
253
+ def __len__(self):
254
+ return len(self._items) # 返回非负整数
255
+ ```