scancscode 1.0.35 → 1.0.36
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/.trae/specs/fix-string-expression-capture-range/checklist.md +7 -0
- package/.trae/specs/fix-string-expression-capture-range/spec.md +96 -0
- package/.trae/specs/fix-string-expression-capture-range/tasks.md +25 -0
- package/.trae/specs/handle-null-value/checklist.md +10 -0
- package/.trae/specs/handle-null-value/spec.md +57 -0
- package/.trae/specs/handle-null-value/tasks.md +40 -0
- package/.trae/specs/handle-right-value-expression/checklist.md +9 -0
- package/.trae/specs/handle-right-value-expression/spec.md +72 -0
- package/.trae/specs/handle-right-value-expression/tasks.md +53 -0
- package/.trae/specs/process-function-call-interpolated-strings/checklist.md +12 -0
- package/.trae/specs/process-function-call-interpolated-strings/spec.md +80 -0
- package/.trae/specs/process-function-call-interpolated-strings/tasks.md +73 -0
- package/dist/src/CSharpStringExtractor.js +547 -117
- package/dist/test/CSharpStringExtractor.test.js +174 -0
- package/package.json +1 -1
- package/src/CSharpStringExtractor.ts +581 -116
- package/test/CSharpStringExtractor.test.ts +185 -0
- package/dist/debug-arg.js +0 -30
- package/dist/debug-args.js +0 -34
- package/dist/debug-comment-5.js +0 -25
- package/dist/debug-comment-strings.js +0 -24
- package/dist/debug-full.js +0 -14
- package/dist/debug-template-issue.js +0 -33
- package/dist/debug-test-5.js +0 -23
- package/dist/debug-test.js +0 -21
- package/dist/debug.js +0 -15
- package/dist/simple-debug.js +0 -27
- package/dist/simple-test.js +0 -61
- package/dist/temp-original-source.js +0 -1
- package/dist/test-logic.js +0 -79
- package/dist/test-regex.js +0 -13
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 修正字符串表达式捕获范围 - Verification Checklist
|
|
2
|
+
|
|
3
|
+
- [ ] 修复了 `processAllFunctionCallsInRange` 函数中字符串插值表达式位置计算问题
|
|
4
|
+
- [ ] 所有 "should handle special characters in string 8" 测试用例都通过
|
|
5
|
+
- [ ] 完整的 Jest 测试套件运行通过(所有 120 个测试)
|
|
6
|
+
- [ ] 代码仅修改了问题相关的部分,没有引入不必要的变更
|
|
7
|
+
- [ ] 使用了 TypeScript 语言语法,没有使用 HTML 实体编码和保留字段作为变量名
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# 修正字符串表达式捕获范围 - Product Requirement Document
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
* **Summary**: 修正 `CSharpStringExtractor` 中函数调用参数内字符串插值表达式的 `originalIndex` 计算问题
|
|
6
|
+
|
|
7
|
+
* **Purpose**: 解决测试用例中 `originalIndex` 与期望值不符的问题,确保正确捕获字符串表达式的起始位置
|
|
8
|
+
|
|
9
|
+
* **Target Users**: 使用 `CSharpStringExtractor` 进行 C# 代码国际化处理的开发者
|
|
10
|
+
|
|
11
|
+
## Goals
|
|
12
|
+
|
|
13
|
+
* 修正函数调用参数内字符串插值表达式的 `originalIndex` 计算
|
|
14
|
+
|
|
15
|
+
* 确保所有新增测试用例能够正确通过
|
|
16
|
+
|
|
17
|
+
* 保持现有功能的正常工作
|
|
18
|
+
|
|
19
|
+
## Non-Goals (Out of Scope)
|
|
20
|
+
|
|
21
|
+
* 不修改其他无关的代码逻辑
|
|
22
|
+
|
|
23
|
+
* 不新增测试用例(使用已有测试)
|
|
24
|
+
|
|
25
|
+
* 不重构现有代码结构
|
|
26
|
+
|
|
27
|
+
## Ba**ckground & Context**
|
|
28
|
+
|
|
29
|
+
* **测试用例显示,函数调用参数内的字符串插值表达式(如** **`$"vwvwe{index + 1}"`)的** **`originalIndex`** **计算不正确**
|
|
30
|
+
|
|
31
|
+
* **期望的** **`originalIndex`** **是字符串在原始代码中的实际位置,但实际返回的值偏离了10个字符**
|
|
32
|
+
|
|
33
|
+
* **问题出在** **`processAllFunctionCallsInRange`** **函数中处理字符串位置的逻辑**
|
|
34
|
+
|
|
35
|
+
## **Functional R**equirements
|
|
36
|
+
|
|
37
|
+
* **FR-1**: 函数调用参数内的普通字符串字面量的 `originalIndex` 必须正确
|
|
38
|
+
|
|
39
|
+
* **FR-2**: 函数调用参数内的字符串插值表达式(`$"..."`)的 `originalIndex` 必须正确
|
|
40
|
+
|
|
41
|
+
* **FR-3**: 函数调用参数内的逐字字符串插值(`$@"..."`、`@$"..."`)的 `originalIndex` 必须正确
|
|
42
|
+
|
|
43
|
+
## Non-Functional Requirements
|
|
44
|
+
|
|
45
|
+
* **NFR-1**: 所有现有测试用例必须继续通过
|
|
46
|
+
|
|
47
|
+
* **NFR-2**: 性能不能有明显下降
|
|
48
|
+
|
|
49
|
+
* **NFR-3**: 代码变更必须是最小的,只修复问题相关的部分
|
|
50
|
+
|
|
51
|
+
## Constraints
|
|
52
|
+
|
|
53
|
+
* **Technical**: 必须使用 TypeScript 语言,不使用 HTML 实体编码,不使用保留字段作为变量名
|
|
54
|
+
|
|
55
|
+
* **Business**: 必须在不破坏现有功能的前提下修复问题
|
|
56
|
+
|
|
57
|
+
* **Dependencies**: 依赖现有的 Jest 测试框架
|
|
58
|
+
|
|
59
|
+
## Assumptions
|
|
60
|
+
|
|
61
|
+
* 测试用例的期望是正确的
|
|
62
|
+
|
|
63
|
+
* 只有 `originalIndex` 的计算有问题,其他功能正常
|
|
64
|
+
|
|
65
|
+
* 问题只出现在函数调用参数内的字符串处理
|
|
66
|
+
|
|
67
|
+
## Acceptance Criteria
|
|
68
|
+
|
|
69
|
+
### AC-1: 正确计算字符串插值表达式的 originalIndex
|
|
70
|
+
|
|
71
|
+
* **Given**: 有一个包含函数调用参数内字符串插值的 C# 代码
|
|
72
|
+
|
|
73
|
+
* **When**: 调用 `extractor.extractStrings(code)` 处理代码
|
|
74
|
+
|
|
75
|
+
* **Then**: 返回的 snippet 的 `originalIndex` 必须等于字符串在原始代码中的实际索引位置
|
|
76
|
+
|
|
77
|
+
* **Verification**: `programmatic`
|
|
78
|
+
|
|
79
|
+
* **Notes**: 验证测试用例 "should handle special characters in string 8" 的所有实例
|
|
80
|
+
|
|
81
|
+
### AC-2: 所有现有测试继续通过
|
|
82
|
+
|
|
83
|
+
* **Given**: 所有已有的 Jest 测试用例
|
|
84
|
+
|
|
85
|
+
* **When**: 运行完整的测试套件
|
|
86
|
+
|
|
87
|
+
* **Then**: 所有测试用例必须通过
|
|
88
|
+
|
|
89
|
+
* **Verification**: `programmatic`
|
|
90
|
+
|
|
91
|
+
* **Notes**: 确保没有引入新的问题
|
|
92
|
+
|
|
93
|
+
## Open Questions
|
|
94
|
+
|
|
95
|
+
* 无
|
|
96
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 修正字符串表达式捕获范围 - The Implementation Plan (Decomposed and Prioritized Task List)
|
|
2
|
+
|
|
3
|
+
## [/] Task 1: 分析并修复 processAllFunctionCallsInRange 函数中字符串位置计算问题
|
|
4
|
+
- **Priority**: P0
|
|
5
|
+
- **Depends On**: None
|
|
6
|
+
- **Description**:
|
|
7
|
+
- 分析 `processAllFunctionCallsInRange` 函数中字符串插值表达式位置计算的问题
|
|
8
|
+
- 修复字符串位置的捕获逻辑,确保返回正确的 originalIndex
|
|
9
|
+
- 特别关注字符串插值表达式($"..."、$@"..."、@$"...")的位置识别
|
|
10
|
+
- **Acceptance Criteria Addressed**: [AC-1]
|
|
11
|
+
- **Test Requirements**:
|
|
12
|
+
- `programmatic` TR-1.1: 运行测试用例 "should handle special characters in string 8",确保所有实例都通过
|
|
13
|
+
- `programmatic` TR-1.2: 确保 originalIndex 与 code.indexOf(...) 返回的值匹配
|
|
14
|
+
- **Notes**: 问题可能出在处理参数内字符串的索引计算逻辑上
|
|
15
|
+
|
|
16
|
+
## [ ] Task 2: 运行完整测试套件验证
|
|
17
|
+
- **Priority**: P1
|
|
18
|
+
- **Depends On**: Task 1
|
|
19
|
+
- **Description**:
|
|
20
|
+
- 运行完整的 Jest 测试套件
|
|
21
|
+
- 确保所有 120 个测试用例都通过
|
|
22
|
+
- **Acceptance Criteria Addressed**: [AC-2]
|
|
23
|
+
- **Test Requirements**:
|
|
24
|
+
- `programmatic` TR-2.1: 运行 `npx jest` 并确保所有测试通过
|
|
25
|
+
- **Notes**: 如果有测试失败,需要回到 Task 1 继续修复
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
|
|
2
|
+
# 处理 null 值 - 验证清单
|
|
3
|
+
|
|
4
|
+
- [x] Checkpoint 1: 找到所有添加 .TR() 的关键方法位置(processTextAssignments、processStringConcatenation 等)
|
|
5
|
+
- [x] Checkpoint 2: 在添加 .TR() 之前添加 null 检查逻辑
|
|
6
|
+
- [x] Checkpoint 3: 当值为 null 时,跳过添加 .TR(),保持原样
|
|
7
|
+
- [x] Checkpoint 4: 目标测试用例 "should handle null" 通过
|
|
8
|
+
- [x] Checkpoint 5: 所有其他现有测试仍然通过(无回归错误)
|
|
9
|
+
- [x] Checkpoint 6: 严格遵循 TypeScript 语法,不使用 HTML 特殊字符或保留字段作为局部变量名
|
|
10
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
|
|
2
|
+
# 处理 null 值 - 产品需求文档
|
|
3
|
+
|
|
4
|
+
## 概述
|
|
5
|
+
- **Summary**: 修改 CSharpStringExtractor 类,使其在处理 null 值时保持原样而不是错误地添加 .TR() 后缀。
|
|
6
|
+
- **Purpose**: 确保当字符串表达式字面量为 null 时,代码不会对其进行转换,保持 null 的原始状态,以通过相关测试用例。
|
|
7
|
+
- **Target Users**: 使用该工具进行 C# 代码国际化处理的开发人员。
|
|
8
|
+
|
|
9
|
+
## 目标
|
|
10
|
+
- 正确处理 null 值,不对 null 进行任何转换
|
|
11
|
+
- 确保转换后的代码与原始代码保持一致(null 保持为 null)
|
|
12
|
+
- 通过测试用例 "should handle null"
|
|
13
|
+
|
|
14
|
+
## 非目标
|
|
15
|
+
- 不修改其他字符串处理逻辑
|
|
16
|
+
- 不改变其他关键字(如 true、false)的行为
|
|
17
|
+
- 不引入新的功能
|
|
18
|
+
|
|
19
|
+
## 背景与上下文
|
|
20
|
+
- 当前代码在处理值为 null 的文本赋值(如 `m_text_notice.text = null;`)时,错误地将 null 转换为 null.TR()
|
|
21
|
+
- 这导致了测试用例失败,因为期望 null 保持原样不转换
|
|
22
|
+
- 需要修改相关处理逻辑,识别 null 关键字并跳过对它的转换
|
|
23
|
+
|
|
24
|
+
## 功能需求
|
|
25
|
+
- **FR-1**: 代码应该能够识别 null 值
|
|
26
|
+
- **FR-2**: 当处理 null 时,不应该添加 .TR() 后缀
|
|
27
|
+
- **FR-3**: 处理 null 后的 convertedCode 应该仍然是 "null"
|
|
28
|
+
|
|
29
|
+
## 非功能需求
|
|
30
|
+
- **NFR-1**: 保持现有功能的性能不受影响
|
|
31
|
+
- **NFR-2**: 不破坏现有的其他测试用例
|
|
32
|
+
|
|
33
|
+
## 约束
|
|
34
|
+
- **技术**: 必须严格使用 TypeScript 语言语法
|
|
35
|
+
- **技术**: 不能使用 <、&、> 等 HTML 符号
|
|
36
|
+
- **技术**: 不能使用 arguments 等保留字段作为局部变量名
|
|
37
|
+
|
|
38
|
+
## 假设
|
|
39
|
+
- 只有 null 关键字需要特殊处理,其他值正常处理
|
|
40
|
+
- 不改变 true、false 等其他关键字的行为
|
|
41
|
+
|
|
42
|
+
## 验收标准
|
|
43
|
+
|
|
44
|
+
### AC-1: null 值保持原样
|
|
45
|
+
- **Given**: 存在包含 `m_text_notice.text = null;` 这样语句的 C# 代码
|
|
46
|
+
- **When**: 使用 extractor.extractStrings(code) 处理该代码
|
|
47
|
+
- **Then**:
|
|
48
|
+
- 生成的 snippet 的 originalCode 应该是 "null"
|
|
49
|
+
- convertedCode 应该仍然是 "null"
|
|
50
|
+
- isChanged 应该为 false
|
|
51
|
+
- literals 应该是空数组
|
|
52
|
+
- **Verification**: `programmatic`
|
|
53
|
+
- **Notes**: 通过 test/CSharpStringExtractor.test.ts#L2655-2671 中的测试用例验证
|
|
54
|
+
|
|
55
|
+
## 待解决问题
|
|
56
|
+
- [ ] 无待解决问题
|
|
57
|
+
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
|
|
2
|
+
# 处理 null 值 - 实现计划 (分解和优先级任务列表)
|
|
3
|
+
|
|
4
|
+
## [x] 任务 1: 找到处理 null 值被错误转换的代码位置
|
|
5
|
+
- **Priority**: P0
|
|
6
|
+
- **Depends On**: None
|
|
7
|
+
- **Description**:
|
|
8
|
+
- 分析 CSharpStringExtractor.ts 中的代码,找到添加 .TR() 后缀的关键位置
|
|
9
|
+
- 主要检查 processTextAssignments 和 processStatementAndExtractValue 等方法
|
|
10
|
+
- **Acceptance Criteria Addressed**: [AC-1]
|
|
11
|
+
- **Test Requirements**:
|
|
12
|
+
- `programmatic` TR-1.1: 找到所有可能添加 .TR() 的方法 ✓
|
|
13
|
+
- **Notes**: 特别注意 .text 赋值处理的代码路径
|
|
14
|
+
|
|
15
|
+
## [x] 任务 2: 修改相关方法,对 null 值进行特殊处理
|
|
16
|
+
- **Priority**: P0
|
|
17
|
+
- **Depends On**: ["任务 1"]
|
|
18
|
+
- **Description**:
|
|
19
|
+
- 在添加 .TR() 后缀的代码之前,检查值是否为 null
|
|
20
|
+
- 如果是 null,就跳过转换,保持原样
|
|
21
|
+
- **Acceptance Criteria Addressed**: [AC-1]
|
|
22
|
+
- **Test Requirements**:
|
|
23
|
+
- `programmatic` TR-2.1: 在 processTextAssignments 中添加 null 检查 ✓
|
|
24
|
+
- `programmatic` TR-2.2: 在 processStringConcatenation 中添加 null 检查 ✓
|
|
25
|
+
- `programmatic` TR-2.3: 在其他相关方法中添加 null 检查(如果需要)
|
|
26
|
+
- **Notes**: 只修改与添加 .TR() 相关的逻辑
|
|
27
|
+
|
|
28
|
+
## [x] 任务 3: 验证修复是否解决了问题
|
|
29
|
+
- **Priority**: P0
|
|
30
|
+
- **Depends On**: ["任务 2"]
|
|
31
|
+
- **Description**:
|
|
32
|
+
- 运行目标测试用例 "should handle null"
|
|
33
|
+
- 确保测试通过
|
|
34
|
+
- 运行完整的测试套件,确保其他测试没有受到影响
|
|
35
|
+
- **Acceptance Criteria Addressed**: [AC-1]
|
|
36
|
+
- **Test Requirements**:
|
|
37
|
+
- `programmatic` TR-3.1: "should handle null" 测试用例通过 ✓
|
|
38
|
+
- `programmatic` TR-3.2: 所有其他现有测试继续通过(无回归)
|
|
39
|
+
- **Notes**: 使用 Jest 运行完整测试套件
|
|
40
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 右值表达式字符串提取 - Verification Checklist
|
|
2
|
+
|
|
3
|
+
- [ ] "should handle right value expression" 测试用例通过
|
|
4
|
+
- [ ] "should handle special characters in string 8" 测试用例通过
|
|
5
|
+
- [ ] "should handle assignment expression with both sides strings" 测试用例通过
|
|
6
|
+
- [ ] 所有现有的测试用例继续通过
|
|
7
|
+
- [ ] 代码严格遵循 TypeScript 语法
|
|
8
|
+
- [ ] 不使用 HTML 实体编码字符
|
|
9
|
+
- [ ] 不使用 arguments 等保留字段作为局部变量名
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# 右值表达式字符串提取 - Product Requirement Document
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
- **Summary**: 修改 CSharpStringExtractor 类,使其能够正确处理赋值表达式左右两边都有字符串的情况,包括处理出现在 `=` 左边(左值表达式)的字符串,以及处理包含特殊符号的字符串。
|
|
5
|
+
- **Purpose**: 解决当前代码在处理赋值表达式的左值字符串和特殊字符字符串时出现的问题。
|
|
6
|
+
- **Target Users**: Unity 项目开发者,使用此工具进行 C# 代码国际化。
|
|
7
|
+
|
|
8
|
+
## Goals
|
|
9
|
+
- 正确处理赋值表达式 `=` 左边(左值表达式)的字符串
|
|
10
|
+
- 正确处理赋值表达式左右两边都有字符串的情况
|
|
11
|
+
- 保持正确处理赋值表达式 `=` 右边(右值表达式)的字符串
|
|
12
|
+
- 正确处理包含特殊符号的字符串(如 HTML 标签、单引号等)
|
|
13
|
+
- 保持现有功能不变
|
|
14
|
+
|
|
15
|
+
## Non-Goals (Out of Scope)
|
|
16
|
+
- 不修改字符串处理的核心逻辑
|
|
17
|
+
- 不改变已有的测试用例
|
|
18
|
+
- 不添加新的功能,除了修复当前问题
|
|
19
|
+
|
|
20
|
+
## Background & Context
|
|
21
|
+
- 测试用例位于 test/CSharpStringExtractor.test.ts:2493-2560
|
|
22
|
+
- 问题1:左值表达式中的字符串 originalIndex 不匹配
|
|
23
|
+
- 问题2:包含特殊字符的字符串提取了过多片段
|
|
24
|
+
- 问题3:赋值表达式两边都有字符串时,左值字符串的 originalIndex 不匹配
|
|
25
|
+
|
|
26
|
+
## Functional Requirements
|
|
27
|
+
- **FR-1**: 正确处理出现在赋值表达式 `=` 左边(左值表达式)的字符串
|
|
28
|
+
- **FR-2**: 正确处理赋值表达式左右两边都有字符串的情况
|
|
29
|
+
- **FR-3**: 正确处理包含特殊符号的字符串(如 HTML 标签、单引号等)
|
|
30
|
+
|
|
31
|
+
## Non-Functional Requirements
|
|
32
|
+
- **NFR-1**: 所有现有测试用例必须继续通过
|
|
33
|
+
- **NFR-2**: 性能不应受到明显影响
|
|
34
|
+
- **NFR-3**: 代码必须严格遵循 TypeScript 语法
|
|
35
|
+
|
|
36
|
+
## Constraints
|
|
37
|
+
- **Technical**: 使用 TypeScript,不使用 HTML 实体编码,不使用 arguments 等保留字段名
|
|
38
|
+
- **Business**: 必须通过指定的测试用例
|
|
39
|
+
- **Dependencies**: 依赖 Jest 测试框架
|
|
40
|
+
|
|
41
|
+
## Assumptions
|
|
42
|
+
- 左值表达式中的字符串主要出现在函数调用参数中
|
|
43
|
+
- 包含特殊字符的字符串应该被当作一个整体处理
|
|
44
|
+
|
|
45
|
+
## Acceptance Criteria
|
|
46
|
+
|
|
47
|
+
### AC-1: 处理赋值表达式左值的字符串
|
|
48
|
+
- **Given**: 有一个赋值表达式,`=` 左边的表达式中包含字符串
|
|
49
|
+
- **When**: extractStrings 方法被调用处理此代码
|
|
50
|
+
- **Then**: 左值表达式中的字符串被正确提取,originalIndex 正确
|
|
51
|
+
- **Verification**: `programmatic`
|
|
52
|
+
|
|
53
|
+
### AC-2: 处理赋值表达式两边都有字符串
|
|
54
|
+
- **Given**: 有一个赋值表达式,`=` 左右两边都包含字符串
|
|
55
|
+
- **When**: extractStrings 方法被调用处理此代码
|
|
56
|
+
- **Then**: 两边的字符串都被正确提取,顺序正确,originalIndex 正确
|
|
57
|
+
- **Verification**: `programmatic`
|
|
58
|
+
|
|
59
|
+
### AC-3: 处理包含特殊字符的字符串
|
|
60
|
+
- **Given**: 有一个包含特殊字符(如 HTML 标签、单引号)的字符串
|
|
61
|
+
- **When**: extractStrings 方法被调用处理此代码
|
|
62
|
+
- **Then**: 字符串被正确提取,片段数量正确
|
|
63
|
+
- **Verification**: `programmatic`
|
|
64
|
+
|
|
65
|
+
### AC-4: 保持现有功能不变
|
|
66
|
+
- **Given**: 所有现有的测试用例
|
|
67
|
+
- **When**: 运行测试
|
|
68
|
+
- **Then**: 所有现有的测试用例必须通过
|
|
69
|
+
- **Verification**: `programmatic`
|
|
70
|
+
|
|
71
|
+
## Open Questions
|
|
72
|
+
- 无
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# 右值表达式字符串提取 - The Implementation Plan (Decomposed and Prioritized Task List)
|
|
2
|
+
|
|
3
|
+
## [x] Task 1: 分析测试失败的原因
|
|
4
|
+
- **Priority**: P0
|
|
5
|
+
- **Depends On**: None
|
|
6
|
+
- **Description**:
|
|
7
|
+
- 分析 "should handle right value expression" 测试失败原因
|
|
8
|
+
- 分析 "should handle special characters in string 8" 测试失败原因
|
|
9
|
+
- 分析 "should handle assignment expression with both sides strings" 测试失败原因
|
|
10
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3]
|
|
11
|
+
- **Test Requirements**:
|
|
12
|
+
- `programmatic` TR-1.1: 运行测试用例,确认失败状态
|
|
13
|
+
- `programmatic` TR-1.2: 分析代码流程,确定问题所在
|
|
14
|
+
- **Notes**: 无
|
|
15
|
+
|
|
16
|
+
## [x] Task 2: 设计解决方案
|
|
17
|
+
- **Priority**: P0
|
|
18
|
+
- **Depends On**: Task 1
|
|
19
|
+
- **Description**:
|
|
20
|
+
- 分析为什么左值字符串的 originalIndex 不正确
|
|
21
|
+
- 分析为什么特殊字符字符串提取了过多片段
|
|
22
|
+
- 设计如何正确处理这些场景
|
|
23
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3]
|
|
24
|
+
- **Test Requirements**:
|
|
25
|
+
- `human-judgement` TR-2.1: 设计文档清晰说明问题原因和解决方案
|
|
26
|
+
- **Notes**: 确保不破坏现有功能
|
|
27
|
+
|
|
28
|
+
## [/] Task 3: 实现修复
|
|
29
|
+
- **Priority**: P0
|
|
30
|
+
- **Depends On**: Task 2
|
|
31
|
+
- **Description**:
|
|
32
|
+
- 修改源代码以修复三个测试用例的问题
|
|
33
|
+
- 确保左值字符串的 originalIndex 正确
|
|
34
|
+
- 确保特殊字符字符串只提取一个片段
|
|
35
|
+
- 确保赋值表达式两边的字符串都正确提取
|
|
36
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3, AC-4]
|
|
37
|
+
- **Test Requirements**:
|
|
38
|
+
- `programmatic` TR-3.1: 三个目标测试用例通过
|
|
39
|
+
- `programmatic` TR-3.2: 所有现有测试用例继续通过
|
|
40
|
+
- **Notes**: 严格遵循 TypeScript 语法
|
|
41
|
+
|
|
42
|
+
## [ ] Task 4: 全面验证和测试
|
|
43
|
+
- **Priority**: P0
|
|
44
|
+
- **Depends On**: Task 3
|
|
45
|
+
- **Description**:
|
|
46
|
+
- 运行所有目标测试用例
|
|
47
|
+
- 运行所有现有测试用例
|
|
48
|
+
- 确保没有回归
|
|
49
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3, AC-4]
|
|
50
|
+
- **Test Requirements**:
|
|
51
|
+
- `programmatic` TR-4.1: 所有目标测试用例通过
|
|
52
|
+
- `programmatic` TR-4.2: 所有现有测试用例通过
|
|
53
|
+
- **Notes**: 无
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 内插字符串处理增强 - Verification Checklist
|
|
2
|
+
|
|
3
|
+
- [ ] 任务 1 完成:已完整分析 processFunctionCallArguments 方法,理解当前实现
|
|
4
|
+
- [ ] 任务 2 完成:已更新字符串起始位置检测,支持 $""、@$"" 和 $@"" 格式的内插字符串
|
|
5
|
+
- [ ] 任务 3 完成:已更新函数括号查找逻辑,正确处理内插字符串中的括号
|
|
6
|
+
- [ ] 任务 4 完成:已更新参数检测逻辑,能正确识别内插字符串
|
|
7
|
+
- [ ] 任务 5 完成:三个目标测试用例已通过
|
|
8
|
+
- [ ] should handle right value expression
|
|
9
|
+
- [ ] should handle special characters in string 8
|
|
10
|
+
- [ ] should handle assignment expression with both sides strings
|
|
11
|
+
- [ ] 任务 6 完成:所有现有测试用例继续通过
|
|
12
|
+
- [ ] 代码风格与现有保持一致,遵循项目规范
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# 内插字符串处理增强 - Product Requirement Document
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
- **Summary**: 增强 `CSharpStringExtractor` 类中的 `processFunctionCallArguments` 方法,使其能够正确处理 C# 内插字符串(以 $ 开头的字符串),包括 $""、@$"" 和 $@"" 格式。
|
|
5
|
+
- **Purpose**: 解决三个目标测试用例失败的问题,确保函数调用参数中的内插字符串能够被正确识别、处理,同时保持所有现有测试用例继续通过。
|
|
6
|
+
- **Target Users**: 开发者,使用该代码扫描工具提取 C# 字符串进行国际化处理的开发人员。
|
|
7
|
+
|
|
8
|
+
## Goals
|
|
9
|
+
- 使 `processFunctionCallArguments` 方法能够正确识别和处理内插字符串
|
|
10
|
+
- 确保三个目标测试用例能够通过:
|
|
11
|
+
1. should handle right value expression
|
|
12
|
+
2. should handle special characters in string 8
|
|
13
|
+
3. should handle assignment expression with both sides strings
|
|
14
|
+
- 保持所有现有测试用例继续通过
|
|
15
|
+
- 保持与代码库中其他处理内插字符串方法的一致性
|
|
16
|
+
|
|
17
|
+
## Non-Goals (Out of Scope)
|
|
18
|
+
- 不修改除 `processFunctionCallArguments` 方法以外的其他方法的主要逻辑
|
|
19
|
+
- 不重构整个代码库的架构
|
|
20
|
+
- 不引入新的依赖
|
|
21
|
+
|
|
22
|
+
## Background & Context
|
|
23
|
+
- 当前 `CSharpStringExtractor` 类负责从 C# 代码中提取字符串并进行国际化处理
|
|
24
|
+
- 该类已经有多个方法已经支持内插字符串处理,如 `extractClassMemberStrings`、`extractObjectInitializerStrings` 等
|
|
25
|
+
- 但 `processFunctionCallArguments` 方法目前只支持普通字符串字面量,不支持内插字符串
|
|
26
|
+
- 三个目标测试用例当前失败,需要修复
|
|
27
|
+
|
|
28
|
+
## Functional Requirements
|
|
29
|
+
- **FR-1**: `processFunctionCallArguments` 方法能识别内插字符串格式:$""
|
|
30
|
+
- **FR-2**: `processFunctionCallArguments` 方法能识别 @$"" 和 $@"" 格式的内插字符串
|
|
31
|
+
- **FR-3**: 正确计算内插字符串的起始位置和结束位置
|
|
32
|
+
- **FR-4**: 正确处理内插字符串中的特殊字符
|
|
33
|
+
- **FR-5**: 确保 originalIndex 值正确设置为内插字符串的起始位置
|
|
34
|
+
|
|
35
|
+
## Non-Functional Requirements
|
|
36
|
+
- **NFR-1**: 所有现有测试必须继续通过
|
|
37
|
+
- **NFR-2**: 三个目标测试必须通过
|
|
38
|
+
- **NFR-3**: 保持代码风格和现有方法保持一致
|
|
39
|
+
|
|
40
|
+
## Constraints
|
|
41
|
+
- **Technical**: 使用 TypeScript,遵循现有代码风格
|
|
42
|
+
- **Business**: 无特定时间限制,但需要保持代码稳定
|
|
43
|
+
- **Dependencies**: 无额外依赖
|
|
44
|
+
|
|
45
|
+
## Assumptions
|
|
46
|
+
- 内插字符串的处理方式可以参考 `extractClassMemberStrings`、`extractObjectInitializerStrings` 等方法
|
|
47
|
+
- 内插字符串需要被正确处理为与普通字符串一样被识别和收集
|
|
48
|
+
- 内插字符串的 originalIndex 应该设置为 `$` 字符的位置
|
|
49
|
+
|
|
50
|
+
## Acceptance Criteria
|
|
51
|
+
|
|
52
|
+
### AC-1: 正确处理右值表达式中的内插字符串
|
|
53
|
+
- **Given**: 有一个 C# 代码,函数调用参数中包含内插字符串
|
|
54
|
+
- **When**: 调用 extractStrings 方法
|
|
55
|
+
- **Then**: 内插字符串被正确提取,originalIndex 正确,snippets 数组中包含正确的片段
|
|
56
|
+
- **Verification**: `programmatic`
|
|
57
|
+
- **Notes**: 通过 should handle right value expression 测试用例通过
|
|
58
|
+
|
|
59
|
+
### AC-2: 正确处理包含特殊字符的内插字符串
|
|
60
|
+
- **Given**: 有一个 C# 代码,内插字符串包含特殊字符
|
|
61
|
+
- **When**: 调用 extractStrings 方法
|
|
62
|
+
- **Then**: 内插字符串被正确提取,只产生一个 CodeSnippet,originalIndex 正确
|
|
63
|
+
- **Verification**: `programmatic`
|
|
64
|
+
- **Notes**: 通过 should handle special characters in string 8 测试用例通过
|
|
65
|
+
|
|
66
|
+
### AC-3: 正确处理赋值表达式两边都有字符串的情况
|
|
67
|
+
- **Given**: 有一个 C# 赋值表达式,左右两边都有字符串
|
|
68
|
+
- **When**: 调用 extractStrings 方法
|
|
69
|
+
- **Then**: 两个字符串都被正确提取,originalIndex 都正确
|
|
70
|
+
- **Verification**: `programmatic`
|
|
71
|
+
- **Notes**: 通过 should handle assignment expression with both sides strings 测试用例通过
|
|
72
|
+
|
|
73
|
+
### AC-4: 所有现有测试用例继续通过
|
|
74
|
+
- **Given**: 完整的测试套件
|
|
75
|
+
- **When**: 运行完整测试
|
|
76
|
+
- **Then**: 所有现有 113 个测试继续通过
|
|
77
|
+
- **Verification**: `programmatic`
|
|
78
|
+
|
|
79
|
+
## Open Questions
|
|
80
|
+
- 无
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# 内插字符串处理增强 - The Implementation Plan (Decomposed and Prioritized Task List)
|
|
2
|
+
|
|
3
|
+
## [x] Task 1: 分析 processFunctionCallArguments 方法,理解当前实现
|
|
4
|
+
- **Priority**: P0
|
|
5
|
+
- **Depends On**: None
|
|
6
|
+
- **Description**:
|
|
7
|
+
- 仔细阅读 processFunctionCallArguments 方法的完整实现
|
|
8
|
+
- 理解它当前如何处理字符串字面量
|
|
9
|
+
- 识别需要修改的具体位置
|
|
10
|
+
- 参考其他已实现内插字符串处理的方法(如 extractClassMemberStrings)
|
|
11
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3, AC-4]
|
|
12
|
+
- **Test Requirements**:
|
|
13
|
+
- `programmatic` TR-1.1: 完整理解方法逻辑
|
|
14
|
+
- **Notes**: 首先仔细阅读代码,确保理解需要修改的所有部分
|
|
15
|
+
|
|
16
|
+
## [/] Task 2: 更新字符串起始位置检测,支持内插字符串
|
|
17
|
+
- **Priority**: P0
|
|
18
|
+
- **Depends On**: [Task 1]
|
|
19
|
+
- **Description**:
|
|
20
|
+
- 修改 simpleStringLiteralPositions 收集逻辑
|
|
21
|
+
- 添加对 $""、@$"" 和 $@"" 格式的支持
|
|
22
|
+
- 确保内插字符串的起始位置也被记录下来
|
|
23
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3]
|
|
24
|
+
- **Test Requirements**:
|
|
25
|
+
- `programmatic` TR-2.1: simpleStringLiteralPositions 包含内插字符串的起始位置
|
|
26
|
+
- **Notes**: 参考 extractClassMemberStrings 中处理内插字符串的模式
|
|
27
|
+
|
|
28
|
+
## [ ] Task 3: 更新函数括号查找逻辑,支持内插字符串
|
|
29
|
+
- **Priority**: P0
|
|
30
|
+
- **Depends On**: [Task 2]
|
|
31
|
+
- **Description**:
|
|
32
|
+
- 修改查找括号时的字符串状态管理逻辑
|
|
33
|
+
- 添加对内插字符串的识别,避免在内插字符串内部误判括号
|
|
34
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3]
|
|
35
|
+
- **Test Requirements**:
|
|
36
|
+
- `programmatic` TR-3.1: 查找括号位置时正确处理内插字符串
|
|
37
|
+
- **Notes**: 确保在查找括号时不会被内插字符串中的字符干扰
|
|
38
|
+
|
|
39
|
+
## [ ] Task 4: 更新参数检测逻辑,支持内插字符串
|
|
40
|
+
- **Priority**: P0
|
|
41
|
+
- **Depends On**: [Task 3]
|
|
42
|
+
- **Description**:
|
|
43
|
+
- 修改 hasStringLiteral 的检测方式
|
|
44
|
+
- 更新简单字符串字面量的判断逻辑,添加对内插字符串的支持
|
|
45
|
+
- 确保内插字符串被正确识别为简单字符串字面量
|
|
46
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3, AC-4]
|
|
47
|
+
- **Test Requirements**:
|
|
48
|
+
- `programmatic` TR-4.1: 内插字符串被正确识别为有字符串字面量
|
|
49
|
+
- `programmatic` TR-4.2: 内插字符串被正确判断为简单字符串字面量
|
|
50
|
+
|
|
51
|
+
## [ ] Task 5: 运行并调试三个目标测试用例
|
|
52
|
+
- **Priority**: P0
|
|
53
|
+
- **Depends On**: [Task 4]
|
|
54
|
+
- **Description**:
|
|
55
|
+
- 运行测试,检查三个目标测试用例
|
|
56
|
+
- 修复任何发现的问题
|
|
57
|
+
- 确保 originalIndex 正确
|
|
58
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3]
|
|
59
|
+
- **Test Requirements**:
|
|
60
|
+
- `programmatic` TR-5.1: should handle right value expression 测试通过
|
|
61
|
+
- `programmatic` TR-5.2: should handle special characters in string 8 测试通过
|
|
62
|
+
- `programmatic` TR-5.3: should handle assignment expression with both sides strings 测试通过
|
|
63
|
+
|
|
64
|
+
## [ ] Task 6: 运行完整测试套件,确保所有现有测试继续通过
|
|
65
|
+
- **Priority**: P0
|
|
66
|
+
- **Depends On**: [Task 5]
|
|
67
|
+
- **Description**:
|
|
68
|
+
- 运行完整的 Jest 测试套件
|
|
69
|
+
- 检查并修复任何可能失败的现有测试
|
|
70
|
+
- 确保没有引入新的问题
|
|
71
|
+
- **Acceptance Criteria Addressed**: [AC-4]
|
|
72
|
+
- **Test Requirements**:
|
|
73
|
+
- `programmatic` TR-6.1: 所有 113+ 现有测试用例通过
|