jarvis-ai-assistant 0.7.8__py3-none-any.whl → 1.0.2__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.
Files changed (279) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +567 -222
  3. jarvis/jarvis_agent/agent_manager.py +19 -12
  4. jarvis/jarvis_agent/builtin_input_handler.py +79 -11
  5. jarvis/jarvis_agent/config_editor.py +7 -2
  6. jarvis/jarvis_agent/event_bus.py +24 -13
  7. jarvis/jarvis_agent/events.py +19 -1
  8. jarvis/jarvis_agent/file_context_handler.py +67 -64
  9. jarvis/jarvis_agent/file_methodology_manager.py +38 -24
  10. jarvis/jarvis_agent/jarvis.py +186 -114
  11. jarvis/jarvis_agent/language_extractors/__init__.py +8 -1
  12. jarvis/jarvis_agent/language_extractors/c_extractor.py +7 -4
  13. jarvis/jarvis_agent/language_extractors/cpp_extractor.py +9 -4
  14. jarvis/jarvis_agent/language_extractors/go_extractor.py +7 -4
  15. jarvis/jarvis_agent/language_extractors/java_extractor.py +27 -20
  16. jarvis/jarvis_agent/language_extractors/javascript_extractor.py +22 -17
  17. jarvis/jarvis_agent/language_extractors/python_extractor.py +7 -4
  18. jarvis/jarvis_agent/language_extractors/rust_extractor.py +7 -4
  19. jarvis/jarvis_agent/language_extractors/typescript_extractor.py +22 -17
  20. jarvis/jarvis_agent/language_support_info.py +250 -219
  21. jarvis/jarvis_agent/main.py +19 -23
  22. jarvis/jarvis_agent/memory_manager.py +9 -6
  23. jarvis/jarvis_agent/methodology_share_manager.py +21 -15
  24. jarvis/jarvis_agent/output_handler.py +4 -2
  25. jarvis/jarvis_agent/prompt_builder.py +7 -6
  26. jarvis/jarvis_agent/prompt_manager.py +113 -8
  27. jarvis/jarvis_agent/prompts.py +317 -85
  28. jarvis/jarvis_agent/protocols.py +5 -2
  29. jarvis/jarvis_agent/run_loop.py +192 -32
  30. jarvis/jarvis_agent/session_manager.py +7 -3
  31. jarvis/jarvis_agent/share_manager.py +23 -13
  32. jarvis/jarvis_agent/shell_input_handler.py +12 -8
  33. jarvis/jarvis_agent/stdio_redirect.py +25 -26
  34. jarvis/jarvis_agent/task_analyzer.py +29 -23
  35. jarvis/jarvis_agent/task_list.py +869 -0
  36. jarvis/jarvis_agent/task_manager.py +26 -23
  37. jarvis/jarvis_agent/tool_executor.py +6 -5
  38. jarvis/jarvis_agent/tool_share_manager.py +24 -14
  39. jarvis/jarvis_agent/user_interaction.py +3 -3
  40. jarvis/jarvis_agent/utils.py +9 -1
  41. jarvis/jarvis_agent/web_bridge.py +37 -17
  42. jarvis/jarvis_agent/web_output_sink.py +5 -2
  43. jarvis/jarvis_agent/web_server.py +165 -36
  44. jarvis/jarvis_c2rust/__init__.py +1 -1
  45. jarvis/jarvis_c2rust/cli.py +260 -141
  46. jarvis/jarvis_c2rust/collector.py +37 -18
  47. jarvis/jarvis_c2rust/constants.py +60 -0
  48. jarvis/jarvis_c2rust/library_replacer.py +242 -1010
  49. jarvis/jarvis_c2rust/library_replacer_checkpoint.py +133 -0
  50. jarvis/jarvis_c2rust/library_replacer_llm.py +287 -0
  51. jarvis/jarvis_c2rust/library_replacer_loader.py +191 -0
  52. jarvis/jarvis_c2rust/library_replacer_output.py +134 -0
  53. jarvis/jarvis_c2rust/library_replacer_prompts.py +124 -0
  54. jarvis/jarvis_c2rust/library_replacer_utils.py +188 -0
  55. jarvis/jarvis_c2rust/llm_module_agent.py +98 -1044
  56. jarvis/jarvis_c2rust/llm_module_agent_apply.py +170 -0
  57. jarvis/jarvis_c2rust/llm_module_agent_executor.py +288 -0
  58. jarvis/jarvis_c2rust/llm_module_agent_loader.py +170 -0
  59. jarvis/jarvis_c2rust/llm_module_agent_prompts.py +268 -0
  60. jarvis/jarvis_c2rust/llm_module_agent_types.py +57 -0
  61. jarvis/jarvis_c2rust/llm_module_agent_utils.py +150 -0
  62. jarvis/jarvis_c2rust/llm_module_agent_validator.py +119 -0
  63. jarvis/jarvis_c2rust/loaders.py +28 -10
  64. jarvis/jarvis_c2rust/models.py +5 -2
  65. jarvis/jarvis_c2rust/optimizer.py +192 -1974
  66. jarvis/jarvis_c2rust/optimizer_build_fix.py +286 -0
  67. jarvis/jarvis_c2rust/optimizer_clippy.py +766 -0
  68. jarvis/jarvis_c2rust/optimizer_config.py +49 -0
  69. jarvis/jarvis_c2rust/optimizer_docs.py +183 -0
  70. jarvis/jarvis_c2rust/optimizer_options.py +48 -0
  71. jarvis/jarvis_c2rust/optimizer_progress.py +469 -0
  72. jarvis/jarvis_c2rust/optimizer_report.py +52 -0
  73. jarvis/jarvis_c2rust/optimizer_unsafe.py +309 -0
  74. jarvis/jarvis_c2rust/optimizer_utils.py +469 -0
  75. jarvis/jarvis_c2rust/optimizer_visibility.py +185 -0
  76. jarvis/jarvis_c2rust/scanner.py +229 -166
  77. jarvis/jarvis_c2rust/transpiler.py +531 -2732
  78. jarvis/jarvis_c2rust/transpiler_agents.py +503 -0
  79. jarvis/jarvis_c2rust/transpiler_build.py +1294 -0
  80. jarvis/jarvis_c2rust/transpiler_codegen.py +204 -0
  81. jarvis/jarvis_c2rust/transpiler_compile.py +146 -0
  82. jarvis/jarvis_c2rust/transpiler_config.py +178 -0
  83. jarvis/jarvis_c2rust/transpiler_context.py +122 -0
  84. jarvis/jarvis_c2rust/transpiler_executor.py +516 -0
  85. jarvis/jarvis_c2rust/transpiler_generation.py +278 -0
  86. jarvis/jarvis_c2rust/transpiler_git.py +163 -0
  87. jarvis/jarvis_c2rust/transpiler_mod_utils.py +225 -0
  88. jarvis/jarvis_c2rust/transpiler_modules.py +336 -0
  89. jarvis/jarvis_c2rust/transpiler_planning.py +394 -0
  90. jarvis/jarvis_c2rust/transpiler_review.py +1196 -0
  91. jarvis/jarvis_c2rust/transpiler_symbols.py +176 -0
  92. jarvis/jarvis_c2rust/utils.py +269 -79
  93. jarvis/jarvis_code_agent/after_change.py +233 -0
  94. jarvis/jarvis_code_agent/build_validation_config.py +37 -30
  95. jarvis/jarvis_code_agent/builtin_rules.py +68 -0
  96. jarvis/jarvis_code_agent/code_agent.py +976 -1517
  97. jarvis/jarvis_code_agent/code_agent_build.py +227 -0
  98. jarvis/jarvis_code_agent/code_agent_diff.py +246 -0
  99. jarvis/jarvis_code_agent/code_agent_git.py +525 -0
  100. jarvis/jarvis_code_agent/code_agent_impact.py +177 -0
  101. jarvis/jarvis_code_agent/code_agent_lint.py +283 -0
  102. jarvis/jarvis_code_agent/code_agent_llm.py +159 -0
  103. jarvis/jarvis_code_agent/code_agent_postprocess.py +105 -0
  104. jarvis/jarvis_code_agent/code_agent_prompts.py +46 -0
  105. jarvis/jarvis_code_agent/code_agent_rules.py +305 -0
  106. jarvis/jarvis_code_agent/code_analyzer/__init__.py +52 -48
  107. jarvis/jarvis_code_agent/code_analyzer/base_language.py +12 -10
  108. jarvis/jarvis_code_agent/code_analyzer/build_validator/__init__.py +12 -11
  109. jarvis/jarvis_code_agent/code_analyzer/build_validator/base.py +16 -12
  110. jarvis/jarvis_code_agent/code_analyzer/build_validator/cmake.py +26 -17
  111. jarvis/jarvis_code_agent/code_analyzer/build_validator/detector.py +558 -104
  112. jarvis/jarvis_code_agent/code_analyzer/build_validator/fallback.py +27 -16
  113. jarvis/jarvis_code_agent/code_analyzer/build_validator/go.py +22 -18
  114. jarvis/jarvis_code_agent/code_analyzer/build_validator/java_gradle.py +21 -16
  115. jarvis/jarvis_code_agent/code_analyzer/build_validator/java_maven.py +20 -16
  116. jarvis/jarvis_code_agent/code_analyzer/build_validator/makefile.py +27 -16
  117. jarvis/jarvis_code_agent/code_analyzer/build_validator/nodejs.py +47 -23
  118. jarvis/jarvis_code_agent/code_analyzer/build_validator/python.py +71 -37
  119. jarvis/jarvis_code_agent/code_analyzer/build_validator/rust.py +162 -35
  120. jarvis/jarvis_code_agent/code_analyzer/build_validator/validator.py +111 -57
  121. jarvis/jarvis_code_agent/code_analyzer/build_validator.py +18 -12
  122. jarvis/jarvis_code_agent/code_analyzer/context_manager.py +185 -183
  123. jarvis/jarvis_code_agent/code_analyzer/context_recommender.py +2 -1
  124. jarvis/jarvis_code_agent/code_analyzer/dependency_analyzer.py +24 -15
  125. jarvis/jarvis_code_agent/code_analyzer/file_ignore.py +227 -141
  126. jarvis/jarvis_code_agent/code_analyzer/impact_analyzer.py +321 -247
  127. jarvis/jarvis_code_agent/code_analyzer/language_registry.py +37 -29
  128. jarvis/jarvis_code_agent/code_analyzer/language_support.py +21 -13
  129. jarvis/jarvis_code_agent/code_analyzer/languages/__init__.py +15 -9
  130. jarvis/jarvis_code_agent/code_analyzer/languages/c_cpp_language.py +75 -45
  131. jarvis/jarvis_code_agent/code_analyzer/languages/go_language.py +87 -52
  132. jarvis/jarvis_code_agent/code_analyzer/languages/java_language.py +84 -51
  133. jarvis/jarvis_code_agent/code_analyzer/languages/javascript_language.py +94 -64
  134. jarvis/jarvis_code_agent/code_analyzer/languages/python_language.py +109 -71
  135. jarvis/jarvis_code_agent/code_analyzer/languages/rust_language.py +97 -63
  136. jarvis/jarvis_code_agent/code_analyzer/languages/typescript_language.py +103 -69
  137. jarvis/jarvis_code_agent/code_analyzer/llm_context_recommender.py +271 -268
  138. jarvis/jarvis_code_agent/code_analyzer/symbol_extractor.py +76 -64
  139. jarvis/jarvis_code_agent/code_analyzer/tree_sitter_extractor.py +92 -19
  140. jarvis/jarvis_code_agent/diff_visualizer.py +998 -0
  141. jarvis/jarvis_code_agent/lint.py +223 -524
  142. jarvis/jarvis_code_agent/rule_share_manager.py +158 -0
  143. jarvis/jarvis_code_agent/rules/clean_code.md +144 -0
  144. jarvis/jarvis_code_agent/rules/code_review.md +115 -0
  145. jarvis/jarvis_code_agent/rules/documentation.md +165 -0
  146. jarvis/jarvis_code_agent/rules/generate_rules.md +52 -0
  147. jarvis/jarvis_code_agent/rules/performance.md +158 -0
  148. jarvis/jarvis_code_agent/rules/refactoring.md +139 -0
  149. jarvis/jarvis_code_agent/rules/security.md +160 -0
  150. jarvis/jarvis_code_agent/rules/tdd.md +78 -0
  151. jarvis/jarvis_code_agent/test_rules/cpp_test.md +118 -0
  152. jarvis/jarvis_code_agent/test_rules/go_test.md +98 -0
  153. jarvis/jarvis_code_agent/test_rules/java_test.md +99 -0
  154. jarvis/jarvis_code_agent/test_rules/javascript_test.md +113 -0
  155. jarvis/jarvis_code_agent/test_rules/php_test.md +117 -0
  156. jarvis/jarvis_code_agent/test_rules/python_test.md +91 -0
  157. jarvis/jarvis_code_agent/test_rules/ruby_test.md +102 -0
  158. jarvis/jarvis_code_agent/test_rules/rust_test.md +86 -0
  159. jarvis/jarvis_code_agent/utils.py +36 -26
  160. jarvis/jarvis_code_analysis/checklists/loader.py +21 -21
  161. jarvis/jarvis_code_analysis/code_review.py +64 -33
  162. jarvis/jarvis_data/config_schema.json +285 -192
  163. jarvis/jarvis_git_squash/main.py +8 -6
  164. jarvis/jarvis_git_utils/git_commiter.py +53 -76
  165. jarvis/jarvis_mcp/__init__.py +5 -2
  166. jarvis/jarvis_mcp/sse_mcp_client.py +40 -30
  167. jarvis/jarvis_mcp/stdio_mcp_client.py +27 -19
  168. jarvis/jarvis_mcp/streamable_mcp_client.py +35 -26
  169. jarvis/jarvis_memory_organizer/memory_organizer.py +78 -55
  170. jarvis/jarvis_methodology/main.py +48 -39
  171. jarvis/jarvis_multi_agent/__init__.py +56 -23
  172. jarvis/jarvis_multi_agent/main.py +15 -18
  173. jarvis/jarvis_platform/base.py +179 -111
  174. jarvis/jarvis_platform/human.py +27 -16
  175. jarvis/jarvis_platform/kimi.py +52 -45
  176. jarvis/jarvis_platform/openai.py +101 -40
  177. jarvis/jarvis_platform/registry.py +51 -33
  178. jarvis/jarvis_platform/tongyi.py +68 -38
  179. jarvis/jarvis_platform/yuanbao.py +59 -43
  180. jarvis/jarvis_platform_manager/main.py +68 -76
  181. jarvis/jarvis_platform_manager/service.py +24 -14
  182. jarvis/jarvis_rag/README_CONFIG.md +314 -0
  183. jarvis/jarvis_rag/README_DYNAMIC_LOADING.md +311 -0
  184. jarvis/jarvis_rag/README_ONLINE_MODELS.md +230 -0
  185. jarvis/jarvis_rag/__init__.py +57 -4
  186. jarvis/jarvis_rag/cache.py +3 -1
  187. jarvis/jarvis_rag/cli.py +48 -68
  188. jarvis/jarvis_rag/embedding_interface.py +39 -0
  189. jarvis/jarvis_rag/embedding_manager.py +7 -230
  190. jarvis/jarvis_rag/embeddings/__init__.py +41 -0
  191. jarvis/jarvis_rag/embeddings/base.py +114 -0
  192. jarvis/jarvis_rag/embeddings/cohere.py +66 -0
  193. jarvis/jarvis_rag/embeddings/edgefn.py +117 -0
  194. jarvis/jarvis_rag/embeddings/local.py +260 -0
  195. jarvis/jarvis_rag/embeddings/openai.py +62 -0
  196. jarvis/jarvis_rag/embeddings/registry.py +293 -0
  197. jarvis/jarvis_rag/llm_interface.py +8 -6
  198. jarvis/jarvis_rag/query_rewriter.py +8 -9
  199. jarvis/jarvis_rag/rag_pipeline.py +61 -52
  200. jarvis/jarvis_rag/reranker.py +7 -75
  201. jarvis/jarvis_rag/reranker_interface.py +32 -0
  202. jarvis/jarvis_rag/rerankers/__init__.py +41 -0
  203. jarvis/jarvis_rag/rerankers/base.py +109 -0
  204. jarvis/jarvis_rag/rerankers/cohere.py +67 -0
  205. jarvis/jarvis_rag/rerankers/edgefn.py +140 -0
  206. jarvis/jarvis_rag/rerankers/jina.py +79 -0
  207. jarvis/jarvis_rag/rerankers/local.py +89 -0
  208. jarvis/jarvis_rag/rerankers/registry.py +293 -0
  209. jarvis/jarvis_rag/retriever.py +58 -43
  210. jarvis/jarvis_sec/__init__.py +66 -141
  211. jarvis/jarvis_sec/agents.py +21 -17
  212. jarvis/jarvis_sec/analysis.py +80 -33
  213. jarvis/jarvis_sec/checkers/__init__.py +7 -13
  214. jarvis/jarvis_sec/checkers/c_checker.py +356 -164
  215. jarvis/jarvis_sec/checkers/rust_checker.py +47 -29
  216. jarvis/jarvis_sec/cli.py +43 -21
  217. jarvis/jarvis_sec/clustering.py +430 -272
  218. jarvis/jarvis_sec/file_manager.py +99 -55
  219. jarvis/jarvis_sec/parsers.py +9 -6
  220. jarvis/jarvis_sec/prompts.py +4 -3
  221. jarvis/jarvis_sec/report.py +44 -22
  222. jarvis/jarvis_sec/review.py +180 -107
  223. jarvis/jarvis_sec/status.py +50 -41
  224. jarvis/jarvis_sec/types.py +3 -0
  225. jarvis/jarvis_sec/utils.py +160 -83
  226. jarvis/jarvis_sec/verification.py +411 -181
  227. jarvis/jarvis_sec/workflow.py +132 -21
  228. jarvis/jarvis_smart_shell/main.py +28 -41
  229. jarvis/jarvis_stats/cli.py +14 -12
  230. jarvis/jarvis_stats/stats.py +28 -19
  231. jarvis/jarvis_stats/storage.py +14 -8
  232. jarvis/jarvis_stats/visualizer.py +12 -7
  233. jarvis/jarvis_tools/base.py +5 -2
  234. jarvis/jarvis_tools/clear_memory.py +13 -9
  235. jarvis/jarvis_tools/cli/main.py +23 -18
  236. jarvis/jarvis_tools/edit_file.py +572 -873
  237. jarvis/jarvis_tools/execute_script.py +10 -7
  238. jarvis/jarvis_tools/file_analyzer.py +7 -8
  239. jarvis/jarvis_tools/meta_agent.py +287 -0
  240. jarvis/jarvis_tools/methodology.py +5 -3
  241. jarvis/jarvis_tools/read_code.py +305 -1438
  242. jarvis/jarvis_tools/read_symbols.py +50 -17
  243. jarvis/jarvis_tools/read_webpage.py +19 -18
  244. jarvis/jarvis_tools/registry.py +435 -156
  245. jarvis/jarvis_tools/retrieve_memory.py +16 -11
  246. jarvis/jarvis_tools/save_memory.py +8 -6
  247. jarvis/jarvis_tools/search_web.py +31 -31
  248. jarvis/jarvis_tools/sub_agent.py +32 -28
  249. jarvis/jarvis_tools/sub_code_agent.py +44 -60
  250. jarvis/jarvis_tools/task_list_manager.py +1811 -0
  251. jarvis/jarvis_tools/virtual_tty.py +29 -19
  252. jarvis/jarvis_utils/__init__.py +4 -0
  253. jarvis/jarvis_utils/builtin_replace_map.py +2 -1
  254. jarvis/jarvis_utils/clipboard.py +9 -8
  255. jarvis/jarvis_utils/collections.py +331 -0
  256. jarvis/jarvis_utils/config.py +699 -194
  257. jarvis/jarvis_utils/dialogue_recorder.py +294 -0
  258. jarvis/jarvis_utils/embedding.py +6 -3
  259. jarvis/jarvis_utils/file_processors.py +7 -1
  260. jarvis/jarvis_utils/fzf.py +9 -3
  261. jarvis/jarvis_utils/git_utils.py +71 -42
  262. jarvis/jarvis_utils/globals.py +116 -32
  263. jarvis/jarvis_utils/http.py +6 -2
  264. jarvis/jarvis_utils/input.py +318 -83
  265. jarvis/jarvis_utils/jsonnet_compat.py +119 -104
  266. jarvis/jarvis_utils/methodology.py +37 -28
  267. jarvis/jarvis_utils/output.py +201 -44
  268. jarvis/jarvis_utils/utils.py +986 -628
  269. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/METADATA +49 -33
  270. jarvis_ai_assistant-1.0.2.dist-info/RECORD +304 -0
  271. jarvis/jarvis_code_agent/code_analyzer/structured_code.py +0 -556
  272. jarvis/jarvis_tools/generate_new_tool.py +0 -205
  273. jarvis/jarvis_tools/lsp_client.py +0 -1552
  274. jarvis/jarvis_tools/rewrite_file.py +0 -105
  275. jarvis_ai_assistant-0.7.8.dist-info/RECORD +0 -218
  276. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/WHEEL +0 -0
  277. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/entry_points.txt +0 -0
  278. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/licenses/LICENSE +0 -0
  279. {jarvis_ai_assistant-0.7.8.dist-info → jarvis_ai_assistant-1.0.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,98 @@
1
+ # Go 测试规则
2
+
3
+ ## ⚠️ 你必须遵守的核心要求
4
+
5
+ **编写完成务必执行测试,直到修复完成为止!**
6
+
7
+ ### 执行要求
8
+
9
+ - **必须**:每次代码修改后,立即运行测试
10
+ - **必须**:如果测试失败,修复代码直到所有测试通过
11
+ - **禁止**:提交未通过测试的代码
12
+ - **禁止**:在测试未通过的情况下继续开发
13
+
14
+ ### 工作流程
15
+
16
+ 1. 编写或修改代码
17
+ 2. **立即**运行测试
18
+ 3. 如果测试失败,修复代码
19
+ 4. 重复步骤 2-3,直到所有测试通过
20
+ 5. 确认所有测试通过后,才能提交代码
21
+
22
+ ## 你必须使用的测试框架
23
+
24
+ ### 标准库 testing(无需安装)
25
+
26
+ **运行命令:**
27
+
28
+ ```bash
29
+ go test # 运行当前包的所有测试
30
+ go test ./... # 运行所有包的测试
31
+ go test -v # 详细输出
32
+ go test -run TestFunc # 运行特定测试函数
33
+ go test -cover # 显示覆盖率
34
+ go test -coverprofile=coverage.out # 生成覆盖率文件
35
+ ```
36
+
37
+ ## 你必须编写的测试示例
38
+
39
+ ```go
40
+ // calculator_test.go
41
+ package calculator
42
+
43
+ import "testing"
44
+
45
+ func TestAdd(t *testing.T) {
46
+ result := Add(2, 3)
47
+ if result != 5 {
48
+ t.Errorf("Add(2, 3) = %d; want 5", result)
49
+ }
50
+ }
51
+
52
+ func TestDivideByZero(t *testing.T) {
53
+ _, err := Divide(10, 0)
54
+ if err == nil {
55
+ t.Error("Divide(10, 0) should return error")
56
+ }
57
+ }
58
+
59
+ // 表驱动测试(推荐使用)
60
+ func TestAddTable(t *testing.T) {
61
+ tests := []struct {
62
+ a, b, want int
63
+ }{
64
+ {2, 3, 5},
65
+ {0, 0, 0},
66
+ {-1, 1, 0},
67
+ }
68
+ for _, tt := range tests {
69
+ if got := Add(tt.a, tt.b); got != tt.want {
70
+ t.Errorf("Add(%d, %d) = %d; want %d", tt.a, tt.b, got, tt.want)
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ## 测试文件规范
77
+
78
+ ### 文件命名
79
+
80
+ - **必须**:测试文件以 `_test.go` 结尾
81
+ - **必须**:测试文件与被测试文件在同一包中
82
+
83
+ ### 函数命名
84
+
85
+ - **必须**:测试函数以 `Test` 开头
86
+ - **必须**:测试函数接受 `*testing.T` 参数
87
+
88
+ ## 测试执行检查清单
89
+
90
+ 在提交代码前,你必须确认:
91
+
92
+ - [ ] **编写完成后立即运行了测试**
93
+ - [ ] **所有测试都通过了**
94
+ - [ ] **如果测试失败,已修复代码直到通过**
95
+ - [ ] 测试文件以 `_test.go` 结尾
96
+ - [ ] 测试函数以 `Test` 开头
97
+ - [ ] 使用表驱动测试覆盖多个场景(如适用)
98
+ - [ ] 测试覆盖了正常、边界和异常情况
@@ -0,0 +1,99 @@
1
+ # Java 测试规则
2
+
3
+ ## ⚠️ 你必须遵守的核心要求
4
+
5
+ **编写完成务必执行测试,直到修复完成为止!**
6
+
7
+ ### 执行要求
8
+
9
+ - **必须**:每次代码修改后,立即运行测试
10
+ - **必须**:如果测试失败,修复代码直到所有测试通过
11
+ - **禁止**:提交未通过测试的代码
12
+ - **禁止**:在测试未通过的情况下继续开发
13
+
14
+ ### 工作流程
15
+
16
+ 1. 编写或修改代码
17
+ 2. **立即**运行测试
18
+ 3. 如果测试失败,修复代码
19
+ 4. 重复步骤 2-3,直到所有测试通过
20
+ 5. 确认所有测试通过后,才能提交代码
21
+
22
+ ## 你必须使用的测试框架
23
+
24
+ ### JUnit 5(推荐使用)
25
+
26
+ **Maven 运行命令:**
27
+
28
+ ```bash
29
+ mvn test # 运行所有测试
30
+ mvn test -Dtest=TestClass # 运行特定测试类
31
+ ```
32
+
33
+ **Gradle 运行命令:**
34
+
35
+ ```bash
36
+ gradle test # 运行所有测试
37
+ gradle test --tests TestClass # 运行特定测试类
38
+ ```
39
+
40
+ ### JUnit 4
41
+
42
+ **运行命令:**
43
+
44
+ ```bash
45
+ mvn test # 运行所有测试
46
+ ```
47
+
48
+ ## 你必须编写的测试示例
49
+
50
+ ### JUnit 5 测试格式
51
+
52
+ ```java
53
+ // src/test/java/CalculatorTest.java
54
+ import org.junit.jupiter.api.Test;
55
+ import static org.junit.jupiter.api.Assertions.*;
56
+
57
+ class CalculatorTest {
58
+ @Test
59
+ void testAdd() {
60
+ Calculator calc = new Calculator();
61
+ assertEquals(5, calc.add(2, 3));
62
+ }
63
+
64
+ @Test
65
+ void testDivideByZero() {
66
+ Calculator calc = new Calculator();
67
+ assertThrows(ArithmeticException.class, () -> {
68
+ calc.divide(10, 0);
69
+ });
70
+ }
71
+ }
72
+ ```
73
+
74
+ ### JUnit 4 测试格式
75
+
76
+ ```java
77
+ import org.junit.Test;
78
+ import static org.junit.Assert.*;
79
+
80
+ public class CalculatorTest {
81
+ @Test
82
+ public void testAdd() {
83
+ Calculator calc = new Calculator();
84
+ assertEquals(5, calc.add(2, 3));
85
+ }
86
+ }
87
+ ```
88
+
89
+ ## 测试执行检查清单
90
+
91
+ 在提交代码前,你必须确认:
92
+
93
+ - [ ] **编写完成后立即运行了测试**
94
+ - [ ] **所有测试都通过了**
95
+ - [ ] **如果测试失败,已修复代码直到通过**
96
+ - [ ] 测试覆盖了正常情况
97
+ - [ ] 测试覆盖了边界情况
98
+ - [ ] 测试覆盖了异常情况
99
+ - [ ] 使用 @BeforeEach/@AfterEach 进行设置和清理(如需要)
@@ -0,0 +1,113 @@
1
+ # JavaScript/TypeScript 测试规则
2
+
3
+ ## ⚠️ 你必须遵守的核心要求
4
+
5
+ **编写完成务必执行测试,直到修复完成为止!**
6
+
7
+ ### 执行要求
8
+
9
+ - **必须**:每次代码修改后,立即运行测试
10
+ - **必须**:如果测试失败,修复代码直到所有测试通过
11
+ - **禁止**:提交未通过测试的代码
12
+ - **禁止**:在测试未通过的情况下继续开发
13
+
14
+ ### 工作流程
15
+
16
+ 1. 编写或修改代码
17
+ 2. **立即**运行测试
18
+ 3. 如果测试失败,修复代码
19
+ 4. 重复步骤 2-3,直到所有测试通过
20
+ 5. 确认所有测试通过后,才能提交代码
21
+
22
+ ## 你必须使用的测试框架
23
+
24
+ ### Jest(推荐使用)
25
+
26
+ **安装命令:**
27
+
28
+ ```bash
29
+ npm install --save-dev jest
30
+ ```
31
+
32
+ **运行命令:**
33
+
34
+ ```bash
35
+ npm test # 运行所有测试
36
+ npm test -- --watch # 监视模式
37
+ npm test -- file.test.js # 运行特定文件
38
+ npm test -- --coverage # 显示覆盖率
39
+ ```
40
+
41
+ ### Mocha + Chai
42
+
43
+ **安装命令:**
44
+
45
+ ```bash
46
+ npm install --save-dev mocha chai
47
+ ```
48
+
49
+ **运行命令:**
50
+
51
+ ```bash
52
+ npm test # 运行所有测试
53
+ npx mocha test/**/*.js # 运行特定目录
54
+ ```
55
+
56
+ ### Vitest(Vite 项目推荐)
57
+
58
+ **安装命令:**
59
+
60
+ ```bash
61
+ npm install --save-dev vitest
62
+ ```
63
+
64
+ **运行命令:**
65
+
66
+ ```bash
67
+ npm test # 运行所有测试
68
+ npm test -- --watch # 监视模式
69
+ ```
70
+
71
+ ## 你必须编写的测试示例
72
+
73
+ ### Jest 测试格式
74
+
75
+ ```javascript
76
+ // test/calculator.test.js
77
+ const { add, divide } = require('../src/calculator');
78
+
79
+ describe('Calculator', () => {
80
+ test('adds two numbers', () => {
81
+ expect(add(2, 3)).toBe(5);
82
+ });
83
+
84
+ test('throws error on divide by zero', () => {
85
+ expect(() => divide(10, 0)).toThrow('Division by zero');
86
+ });
87
+ });
88
+ ```
89
+
90
+ ### TypeScript + Jest 测试格式
91
+
92
+ ```typescript
93
+ // test/calculator.test.ts
94
+ import { add, divide } from '../src/calculator';
95
+
96
+ describe('Calculator', () => {
97
+ it('adds two numbers', () => {
98
+ expect(add(2, 3)).toBe(5);
99
+ });
100
+ });
101
+ ```
102
+
103
+ ## 测试执行检查清单
104
+
105
+ 在提交代码前,你必须确认:
106
+
107
+ - [ ] **编写完成后立即运行了测试**
108
+ - [ ] **所有测试都通过了**
109
+ - [ ] **如果测试失败,已修复代码直到通过**
110
+ - [ ] 测试覆盖了正常情况
111
+ - [ ] 测试覆盖了边界情况
112
+ - [ ] 测试覆盖了异常情况
113
+ - [ ] 使用了描述性的测试名称
@@ -0,0 +1,117 @@
1
+ # PHP 测试规则
2
+
3
+ ## ⚠️ 你必须遵守的核心要求
4
+
5
+ **编写完成务必执行测试,直到修复完成为止!**
6
+
7
+ ### 执行要求
8
+
9
+ - **必须**:每次代码修改后,立即运行测试
10
+ - **必须**:如果测试失败,修复代码直到所有测试通过
11
+ - **禁止**:提交未通过测试的代码
12
+ - **禁止**:在测试未通过的情况下继续开发
13
+
14
+ ### 工作流程
15
+
16
+ 1. 编写或修改代码
17
+ 2. **立即**运行测试
18
+ 3. 如果测试失败,修复代码
19
+ 4. 重复步骤 2-3,直到所有测试通过
20
+ 5. 确认所有测试通过后,才能提交代码
21
+
22
+ ## 你必须使用的测试框架
23
+
24
+ ### PHPUnit(推荐使用)
25
+
26
+ **安装命令:**
27
+
28
+ ```bash
29
+ composer require --dev phpunit/phpunit
30
+ ```
31
+
32
+ **运行命令:**
33
+
34
+ ```bash
35
+ phpunit # 运行所有测试
36
+ phpunit tests/TestClass.php # 运行特定文件
37
+ phpunit --filter testMethod # 运行特定测试方法
38
+ phpunit --coverage-html coverage/ # 生成覆盖率报告
39
+ ```
40
+
41
+ ### Pest
42
+
43
+ **安装命令:**
44
+
45
+ ```bash
46
+ composer require --dev pestphp/pest
47
+ ```
48
+
49
+ **运行命令:**
50
+
51
+ ```bash
52
+ ./vendor/bin/pest # 运行所有测试
53
+ ./vendor/bin/pest --filter test_name # 运行特定测试
54
+ ```
55
+
56
+ ## 你必须编写的测试示例
57
+
58
+ ### PHPUnit 测试格式
59
+
60
+ ```php
61
+ // tests/CalculatorTest.php
62
+ use PHPUnit\Framework\TestCase;
63
+
64
+ class CalculatorTest extends TestCase
65
+ {
66
+ public function testAdd()
67
+ {
68
+ $calc = new Calculator();
69
+ $this->assertEquals(5, $calc->add(2, 3));
70
+ }
71
+
72
+ public function testDivideByZero()
73
+ {
74
+ $calc = new Calculator();
75
+ $this->expectException(DivisionByZeroError::class);
76
+ $calc->divide(10, 0);
77
+ }
78
+ }
79
+ ```
80
+
81
+ ### Pest 测试格式
82
+
83
+ ```php
84
+ // tests/CalculatorTest.php
85
+ use Tests\TestCase;
86
+
87
+ test('adds two numbers', function () {
88
+ $calc = new Calculator();
89
+ expect($calc->add(2, 3))->toBe(5);
90
+ });
91
+ ```
92
+
93
+ ## 测试类和方法规范
94
+
95
+ ### PHPUnit 规范
96
+
97
+ - **必须**:测试类继承 `TestCase`
98
+ - **必须**:测试方法以 `test` 开头或使用 `@test` 注解
99
+ - **必须**:测试方法必须是 `public`
100
+
101
+ ### Pest 规范
102
+
103
+ - **必须**:使用 `test()` 函数定义测试
104
+ - **必须**:使用描述性的测试名称
105
+
106
+ ## 测试执行检查清单
107
+
108
+ 在提交代码前,你必须确认:
109
+
110
+ - [ ] **编写完成后立即运行了测试**
111
+ - [ ] **所有测试都通过了**
112
+ - [ ] **如果测试失败,已修复代码直到通过**
113
+ - [ ] 测试类继承 TestCase(PHPUnit)
114
+ - [ ] 测试方法以 `test` 开头或使用 `@test` 注解
115
+ - [ ] 测试覆盖了正常情况
116
+ - [ ] 测试覆盖了边界情况
117
+ - [ ] 测试覆盖了异常情况
@@ -0,0 +1,91 @@
1
+ # Python 测试规则
2
+
3
+ ## ⚠️ 你必须遵守的核心要求
4
+
5
+ **编写完成务必执行测试,直到修复完成为止!**
6
+
7
+ ### 执行要求
8
+
9
+ - **必须**:每次代码修改后,立即运行测试
10
+ - **必须**:如果测试失败,修复代码直到所有测试通过
11
+ - **禁止**:提交未通过测试的代码
12
+ - **禁止**:在测试未通过的情况下继续开发
13
+
14
+ ### 工作流程
15
+
16
+ 1. 编写或修改代码
17
+ 2. **立即**运行测试
18
+ 3. 如果测试失败,修复代码
19
+ 4. 重复步骤 2-3,直到所有测试通过
20
+ 5. 确认所有测试通过后,才能提交代码
21
+
22
+ ## 你必须使用的测试框架
23
+
24
+ ### pytest(推荐使用)
25
+
26
+ **安装命令:**
27
+
28
+ ```bash
29
+ pip install pytest pytest-cov
30
+ ```
31
+
32
+ **运行命令:**
33
+
34
+ ```bash
35
+ pytest # 运行所有测试
36
+ pytest tests/test_file.py # 运行特定文件
37
+ pytest -v # 详细输出
38
+ pytest -x # 失败时停止
39
+ pytest --cov=src # 显示覆盖率
40
+ ```
41
+
42
+ ### unittest(标准库,无需安装)
43
+
44
+ **运行命令:**
45
+
46
+ ```bash
47
+ python -m unittest discover # 运行所有测试
48
+ python -m unittest -v # 详细输出
49
+ ```
50
+
51
+ ## 你必须编写的测试示例
52
+
53
+ ### pytest 测试格式
54
+
55
+ ```python
56
+ import pytest
57
+ from src.module import function
58
+
59
+ def test_function():
60
+ """测试正常情况"""
61
+ assert function(2, 3) == 5
62
+
63
+ def test_error_case():
64
+ """测试异常情况"""
65
+ with pytest.raises(ValueError):
66
+ function(-1, 0)
67
+ ```
68
+
69
+ ### unittest 测试格式
70
+
71
+ ```python
72
+ import unittest
73
+ from src.module import function
74
+
75
+ class TestModule(unittest.TestCase):
76
+ def test_function(self):
77
+ """测试正常情况"""
78
+ self.assertEqual(function(2, 3), 5)
79
+ ```
80
+
81
+ ## 测试执行检查清单
82
+
83
+ 在提交代码前,你必须确认:
84
+
85
+ - [ ] **编写完成后立即运行了测试**
86
+ - [ ] **所有测试都通过了**
87
+ - [ ] **如果测试失败,已修复代码直到通过**
88
+ - [ ] 测试覆盖了正常情况
89
+ - [ ] 测试覆盖了边界情况
90
+ - [ ] 测试覆盖了异常情况
91
+ - [ ] 使用了有意义的测试名称
@@ -0,0 +1,102 @@
1
+ # Ruby 测试规则
2
+
3
+ ## ⚠️ 你必须遵守的核心要求
4
+
5
+ **编写完成务必执行测试,直到修复完成为止!**
6
+
7
+ ### 执行要求
8
+
9
+ - **必须**:每次代码修改后,立即运行测试
10
+ - **必须**:如果测试失败,修复代码直到所有测试通过
11
+ - **禁止**:提交未通过测试的代码
12
+ - **禁止**:在测试未通过的情况下继续开发
13
+
14
+ ### 工作流程
15
+
16
+ 1. 编写或修改代码
17
+ 2. **立即**运行测试
18
+ 3. 如果测试失败,修复代码
19
+ 4. 重复步骤 2-3,直到所有测试通过
20
+ 5. 确认所有测试通过后,才能提交代码
21
+
22
+ ## 你必须使用的测试框架
23
+
24
+ ### RSpec(推荐使用)
25
+
26
+ **安装命令:**
27
+
28
+ ```bash
29
+ gem install rspec
30
+ # 或添加到 Gemfile
31
+ gem 'rspec'
32
+ ```
33
+
34
+ **运行命令:**
35
+
36
+ ```bash
37
+ rspec # 运行所有测试
38
+ rspec spec/file_spec.rb # 运行特定文件
39
+ rspec -fd # 详细输出
40
+ rspec --format documentation # 文档格式输出
41
+ ```
42
+
43
+ ### Minitest(标准库,无需安装)
44
+
45
+ **运行命令:**
46
+
47
+ ```bash
48
+ ruby -I test test/test_file.rb # 运行特定文件
49
+ rake test # 运行所有测试(Rake)
50
+ ```
51
+
52
+ ## 你必须编写的测试示例
53
+
54
+ ### RSpec 测试格式
55
+
56
+ ```ruby
57
+ # spec/calculator_spec.rb
58
+ require_relative '../lib/calculator'
59
+
60
+ RSpec.describe Calculator do
61
+ describe '#add' do
62
+ it 'adds two numbers' do
63
+ calc = Calculator.new
64
+ expect(calc.add(2, 3)).to eq(5)
65
+ end
66
+ end
67
+
68
+ describe '#divide' do
69
+ it 'raises error on divide by zero' do
70
+ calc = Calculator.new
71
+ expect { calc.divide(10, 0) }.to raise_error(ZeroDivisionError)
72
+ end
73
+ end
74
+ end
75
+ ```
76
+
77
+ ### Minitest 测试格式
78
+
79
+ ```ruby
80
+ # test/test_calculator.rb
81
+ require 'minitest/autorun'
82
+ require_relative '../lib/calculator'
83
+
84
+ class TestCalculator < Minitest::Test
85
+ def test_add
86
+ calc = Calculator.new
87
+ assert_equal 5, calc.add(2, 3)
88
+ end
89
+ end
90
+ ```
91
+
92
+ ## 测试执行检查清单
93
+
94
+ 在提交代码前,你必须确认:
95
+
96
+ - [ ] **编写完成后立即运行了测试**
97
+ - [ ] **所有测试都通过了**
98
+ - [ ] **如果测试失败,已修复代码直到通过**
99
+ - [ ] 使用了描述性的测试名称
100
+ - [ ] 测试覆盖了正常情况
101
+ - [ ] 测试覆盖了边界情况
102
+ - [ ] 测试覆盖了异常情况
@@ -0,0 +1,86 @@
1
+ # Rust 测试规则
2
+
3
+ ## ⚠️ 你必须遵守的核心要求
4
+
5
+ **编写完成务必执行测试,直到修复完成为止!**
6
+
7
+ ### 执行要求
8
+
9
+ - **必须**:每次代码修改后,立即运行测试
10
+ - **必须**:如果测试失败,修复代码直到所有测试通过
11
+ - **禁止**:提交未通过测试的代码
12
+ - **禁止**:在测试未通过的情况下继续开发
13
+
14
+ ### 工作流程
15
+
16
+ 1. 编写或修改代码
17
+ 2. **立即**运行测试
18
+ 3. 如果测试失败,修复代码
19
+ 4. 重复步骤 2-3,直到所有测试通过
20
+ 5. 确认所有测试通过后,才能提交代码
21
+
22
+ ## 你必须使用的测试框架
23
+
24
+ ### 标准库 test(无需安装)
25
+
26
+ **运行命令:**
27
+
28
+ ```bash
29
+ cargo test # 运行所有测试
30
+ cargo test --lib # 只运行库测试
31
+ cargo test --bin name # 运行特定二进制文件测试
32
+ cargo test test_name # 运行特定测试函数
33
+ cargo test -- --nocapture # 显示 println! 输出
34
+ cargo test -- --test-threads=1 # 单线程运行
35
+ ```
36
+
37
+ ## 你必须编写的测试示例
38
+
39
+ ```rust
40
+ // src/lib.rs 或 src/calculator.rs
41
+ #[cfg(test)]
42
+ mod tests {
43
+ use super::*;
44
+
45
+ #[test]
46
+ fn test_add() {
47
+ assert_eq!(add(2, 3), 5);
48
+ }
49
+
50
+ #[test]
51
+ fn test_divide_by_zero() {
52
+ assert!(divide(10, 0).is_err());
53
+ }
54
+
55
+ #[test]
56
+ #[should_panic(expected = "Division by zero")]
57
+ fn test_panic() {
58
+ divide_unchecked(10, 0);
59
+ }
60
+ }
61
+ ```
62
+
63
+ ## 测试模块规范
64
+
65
+ ### 模块标记
66
+
67
+ - **必须**:测试模块使用 `#[cfg(test)]` 属性
68
+ - **必须**:测试函数使用 `#[test]` 属性
69
+
70
+ ### 断言宏
71
+
72
+ - **必须**:使用 `assert!` 进行布尔断言
73
+ - **必须**:使用 `assert_eq!` 进行相等断言
74
+ - **必须**:使用 `assert_ne!` 进行不等断言
75
+
76
+ ## 测试执行检查清单
77
+
78
+ 在提交代码前,你必须确认:
79
+
80
+ - [ ] **编写完成后立即运行了测试**
81
+ - [ ] **所有测试都通过了**
82
+ - [ ] **如果测试失败,已修复代码直到通过**
83
+ - [ ] 测试模块使用 `#[cfg(test)]` 属性
84
+ - [ ] 测试函数使用 `#[test]` 属性
85
+ - [ ] 使用 `assert!`, `assert_eq!`, `assert_ne!` 进行断言
86
+ - [ ] 测试覆盖了正常、边界和异常情况