scancscode 1.0.30 → 1.0.33
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-doc-comment-boundary/checklist.md +7 -0
- package/.trae/specs/fix-doc-comment-boundary/spec.md +52 -0
- package/.trae/specs/fix-doc-comment-boundary/tasks.md +34 -0
- package/.trae/specs/fix-interpolated-string-nested-literals/checklist.md +7 -0
- package/.trae/specs/fix-interpolated-string-nested-literals/spec.md +55 -0
- package/.trae/specs/fix-interpolated-string-nested-literals/tasks.md +25 -0
- package/.trae/specs/fix-remaining-interpolated-string-index/checklist.md +9 -0
- package/.trae/specs/fix-remaining-interpolated-string-index/spec.md +59 -0
- package/.trae/specs/fix-remaining-interpolated-string-index/tasks.md +41 -0
- package/.trae/specs/fix-return-interpolated-string/checklist.md +8 -0
- package/.trae/specs/fix-return-interpolated-string/spec.md +60 -0
- package/.trae/specs/fix-return-interpolated-string/tasks.md +39 -0
- package/.trae/specs/handle-interpolated-string-double-braces/checklist.md +9 -0
- package/.trae/specs/handle-interpolated-string-double-braces/spec.md +61 -0
- package/.trae/specs/handle-interpolated-string-double-braces/tasks.md +41 -0
- package/.trae/specs/handle-return-statement/checklist.md +11 -0
- package/.trae/specs/handle-return-statement/spec.md +76 -0
- package/.trae/specs/handle-return-statement/tasks.md +44 -0
- package/.trae/specs/handle-special-string-characters/checklist.md +13 -0
- package/.trae/specs/handle-special-string-characters/spec.md +94 -0
- package/.trae/specs/handle-special-string-characters/tasks.md +74 -0
- package/.trae/specs/unify-return-statement-string-extraction/checklist.md +10 -0
- package/.trae/specs/unify-return-statement-string-extraction/spec.md +70 -0
- package/.trae/specs/unify-return-statement-string-extraction/tasks.md +54 -0
- package/bin/scanliterals.js +3 -3
- package/bin/slimlangs.js +3 -3
- package/dist/src/CSharpStringExtractor.js +1755 -358
- package/dist/src/CmdExecutor.js +6 -8
- package/dist/test/CSharpStringExtractor.test.js +1484 -207
- package/docs/CSharpStringExtractor/344/273/243/347/240/201/347/224/237/346/210/220/346/217/220/347/244/272/350/257/215.txt +73 -0
- package/jest.config.js +9 -9
- package/package.json +1 -1
- package/src/CSCodeScanner.ts +305 -305
- package/src/CSVUtils.ts +181 -181
- package/src/CSharpStringExtractor.ts +2019 -479
- package/src/CmdExecutor.ts +107 -106
- package/src/LiteralCollector.ts +143 -143
- package/src/RunConvert.ts +3 -3
- package/src/RunSlimLangs.ts +3 -3
- package/src/TableScanner.ts +92 -92
- package/test/CSharpStringExtractor.test.ts +1564 -208
- package/test/KeeperDialog.cs +114 -0
- package/test/TestSpecialString.cs +24 -0
- package/tsconfig.json +109 -109
- package/dist/CSCodeScanner.js +0 -271
- package/dist/CSVUtils.js +0 -218
- package/dist/CmdExecutor.js +0 -101
- package/dist/CodeSnippet.js +0 -2
- package/dist/LiteralCollector.js +0 -124
- package/dist/RunConvert.js +0 -4
- package/dist/RunSlimLangs.js +0 -4
- package/dist/TableScanner.js +0 -107
- package/dist/TestConvert.test.js +0 -10
- package/dist/TestSlimCsv.test.js +0 -10
- package/dist/index.js +0 -4
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
- [x] 检查是否只修改了 extractCommentStrings、extractClassMemberStrings、extractObjectInitializerStrings、processObjectInitializerStringsOnly 等相关代码
|
|
2
|
+
- [x] 检查是否正确识别并跳过了三个或更多连续 / 开头的文档注释
|
|
3
|
+
- [x] 检查是否保持对两个 / 开头的普通注释的正常处理
|
|
4
|
+
- [x] 检查 "should handle doc comment boundary for class/method/members" 测试是否通过
|
|
5
|
+
- [x] 检查所有其他 98 个测试是否保持通过
|
|
6
|
+
- [x] 检查代码是否遵循 TypeScript 语言语法,没有使用 HTML 实体字符
|
|
7
|
+
- [x] 检查是否没有使用 "arguments" 等保留字段作为局部变量名
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# 修复文档注释字符串提取 - Product Requirement Document
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
- **Summary**: 修复 `extractCommentStrings` 方法,使其忽略 C# 文档注释(三个或更多连续 / 开头的注释)中的字符串
|
|
5
|
+
- **Purpose**: 解决测试用例 "should handle doc comment boundary for class and method" 失败的问题
|
|
6
|
+
- **Target Users**: 使用该 C# 字符串提取和国际化工具的开发者
|
|
7
|
+
|
|
8
|
+
## Goals
|
|
9
|
+
- 修复 extractCommentStrings 方法,使其忽略三个或更多连续 / 开头的文档注释
|
|
10
|
+
- 确保测试用例 "should handle doc comment boundary for class and method" 能够通过
|
|
11
|
+
- 保持其他所有现有测试的通过状态
|
|
12
|
+
|
|
13
|
+
## Non-Goals (Out of Scope)
|
|
14
|
+
- 不修改文档注释以外的其他注释处理逻辑
|
|
15
|
+
- 不添加新的功能特性
|
|
16
|
+
|
|
17
|
+
## Background & Context
|
|
18
|
+
- 当前问题:extractCommentStrings 方法正在提取三个或更多连续 / 开头的文档注释中的字符串
|
|
19
|
+
- 测试明确要求:类注释、方法注释、属性/字段注释都不应参与字符串表达式提取
|
|
20
|
+
|
|
21
|
+
## Functional Requirements
|
|
22
|
+
- **FR-1**: 正确识别并忽略三个或更多连续 / 开头的文档注释
|
|
23
|
+
- **FR-2**: 正常处理两个 / 开头的普通注释
|
|
24
|
+
|
|
25
|
+
## Non-Functional Requirements
|
|
26
|
+
- **NFR-1**: 修复后不影响其他 98 个测试的通过状态
|
|
27
|
+
- **NFR-2**: 保持代码的类型安全和可读性
|
|
28
|
+
|
|
29
|
+
## Constraints
|
|
30
|
+
- **Technical**: 必须使用 TypeScript,遵循项目现有代码风格
|
|
31
|
+
- **Business**: 必须保持与现有代码的兼容性
|
|
32
|
+
|
|
33
|
+
## Assumptions
|
|
34
|
+
- 现有代码的其他部分功能正常
|
|
35
|
+
- 测试用例 "should handle doc comment boundary for class and method" 是正确的预期行为
|
|
36
|
+
|
|
37
|
+
## Acceptance Criteria
|
|
38
|
+
|
|
39
|
+
### AC-1: 测试用例 "should handle doc comment boundary for class and method" 成功通过
|
|
40
|
+
- **Given**: 存在该测试用例测试文档注释边界问题
|
|
41
|
+
- **When**: 运行该测试用例
|
|
42
|
+
- **Then**: 测试用例成功通过
|
|
43
|
+
- **Verification**: `programmatic`
|
|
44
|
+
|
|
45
|
+
### AC-2: 其他所有测试保持通过
|
|
46
|
+
- **Given**: 修复后的代码
|
|
47
|
+
- **When**: 运行所有 Jest 测试
|
|
48
|
+
- **Then**: 所有其他 98 个测试保持通过
|
|
49
|
+
- **Verification**: `programmatic`
|
|
50
|
+
|
|
51
|
+
## Open Questions
|
|
52
|
+
- 无
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# 修复文档注释字符串提取 - The Implementation Plan (Decomposed and Prioritized Task List)
|
|
2
|
+
|
|
3
|
+
## [x] Task 1: 修改 extractCommentStrings 方法,忽略文档注释(三个或更多连续 /)
|
|
4
|
+
- **Priority**: P0
|
|
5
|
+
- **Depends On**: None
|
|
6
|
+
- **Description**:
|
|
7
|
+
- 在 extractCommentStrings 方法中,检查是否是三个或更多连续 / 开头的文档注释
|
|
8
|
+
- 如果是文档注释,直接跳过,不处理该注释中的任何字符串
|
|
9
|
+
- 保持对两个 / 开头的普通注释的正常处理
|
|
10
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2]
|
|
11
|
+
- **Test Requirements**:
|
|
12
|
+
- `programmatic` TR-1.1: 确保 "should handle doc comment boundary for class and method" 测试通过 ✓
|
|
13
|
+
- `programmatic` TR-1.2: 确保所有其他 98 个现有测试保持通过 ✓
|
|
14
|
+
- **Notes**: 主要修改在检测到注释时,检查是否是三个连续 / 或更多
|
|
15
|
+
|
|
16
|
+
## [x] Task 2: 在其他提取方法中添加注释跳过逻辑
|
|
17
|
+
- **Priority**: P0
|
|
18
|
+
- **Depends On**: Task 1
|
|
19
|
+
- **Description**:
|
|
20
|
+
- 在 extractClassMemberStrings、extractObjectInitializerStrings、processObjectInitializerStringsOnly 方法中都添加对注释的检测和跳过逻辑
|
|
21
|
+
- 在处理每个字符前先检查当前是否在注释中,如果是就跳过
|
|
22
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2]
|
|
23
|
+
- **Test Requirements**:
|
|
24
|
+
- `programmatic` TR-2.1: 确保所有 99 个测试都通过 ✓
|
|
25
|
+
|
|
26
|
+
## [x] Task 3: 验证修复是否完整
|
|
27
|
+
- **Priority**: P1
|
|
28
|
+
- **Depends On**: Task 2
|
|
29
|
+
- **Description**:
|
|
30
|
+
- 运行所有测试,确保没有引入新问题
|
|
31
|
+
- 验证修复是否完全符合测试用例的预期
|
|
32
|
+
- **Acceptance Criteria Addressed**: [AC-2]
|
|
33
|
+
- **Test Requirements**:
|
|
34
|
+
- `programmatic` TR-3.1: 运行完整的 Jest 测试套件并确保 100% 通过 ✓
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
- [x] 检查修复是否只修改了 processStringTemplates 方法中的相关代码
|
|
2
|
+
- [x] 检查在查找内插表达式 {…} 时是否正确处理了字符串字面量
|
|
3
|
+
- [x] 检查 "should handle fix interpolated string nested literals" 测试是否通过
|
|
4
|
+
- [x] 检查所有其他 96 个测试是否保持通过
|
|
5
|
+
- [x] 检查生成的 convertedCode 是否与测试预期一致
|
|
6
|
+
- [x] 检查代码是否遵循 TypeScript 语言语法,没有使用 HTML 实体字符
|
|
7
|
+
- [x] 检查是否没有使用 "arguments" 等保留字段作为局部变量名
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# 修复内插字符串处理 - Product Requirement Document
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
- **Summary**: 修复 `CSharpStringExtractor` 中处理内插字符串($"")时,当内插表达式内部包含字符串字面量导致的解析错误问题
|
|
5
|
+
- **Purpose**: 解决测试用例 "should handle complex string 3" 失败的问题,该测试验证 C# 字符串表达式中递归内嵌字符串表达式的情况是否能被正确转换
|
|
6
|
+
- **Target Users**: 使用该 C# 字符串提取和国际化工具的开发者
|
|
7
|
+
|
|
8
|
+
## Goals
|
|
9
|
+
- 修复 `processStringTemplates` 方法,使其能够正确处理内插字符串内部包含字符串字面量的情况
|
|
10
|
+
- 确保测试用例 "should handle complex string 3" 能够通过
|
|
11
|
+
- 保持其他现有测试的通过状态
|
|
12
|
+
|
|
13
|
+
## Non-Goals (Out of Scope)
|
|
14
|
+
- 不修改其他与内插字符串处理无关的功能
|
|
15
|
+
- 不添加新的功能特性,仅修复现有问题
|
|
16
|
+
|
|
17
|
+
## Background & Context
|
|
18
|
+
- 当前问题:当处理包含嵌套字符串字面量的内插字符串时,例如 `$"是否暴击: [b]{(_damageInfo.IsCritical ? "[color=#00B000]是[/color]" : "否")}[/b]\n"`,解析器会过早终止匹配,导致转换结果错误
|
|
19
|
+
- 根本原因:1) 模板正则表达式在匹配内容时没有正确处理嵌套的引号;2) 在提取内插表达式 `{...}` 时没有忽略内部字符串字面量中的 `{` 和 `}` 字符
|
|
20
|
+
|
|
21
|
+
## Functional Requirements
|
|
22
|
+
- **FR-1**: 正确匹配包含嵌套字符串字面量的内插字符串
|
|
23
|
+
- **FR-2**: 在提取内插表达式变量时,正确处理内部的字符串引号
|
|
24
|
+
- **FR-3**: 生成正确的 `Tr.Format()` 转换结果
|
|
25
|
+
|
|
26
|
+
## Non-Functional Requirements
|
|
27
|
+
- **NFR-1**: 修复后不影响其他 96 个测试的通过状态
|
|
28
|
+
- **NFR-2**: 保持代码的类型安全和可读性
|
|
29
|
+
|
|
30
|
+
## Constraints
|
|
31
|
+
- **Technical**: 必须使用 TypeScript,遵循项目现有代码风格
|
|
32
|
+
- **Business**: 必须保持与现有代码的兼容性
|
|
33
|
+
- **Dependencies**: 无额外依赖,仅修改现有代码
|
|
34
|
+
|
|
35
|
+
## Assumptions
|
|
36
|
+
- 现有代码的其他部分功能正常
|
|
37
|
+
- 测试用例 "should handle complex string 3" 是正确的预期行为
|
|
38
|
+
|
|
39
|
+
## Acceptance Criteria
|
|
40
|
+
|
|
41
|
+
### AC-1: 测试用例 "should handle complex string 3" 成功通过
|
|
42
|
+
- **Given**: 存在测试用例测试包含嵌套字符串字面量的内插字符串
|
|
43
|
+
- **When**: 运行该测试用例
|
|
44
|
+
- **Then**: 测试用例成功通过
|
|
45
|
+
- **Verification**: `programmatic`
|
|
46
|
+
- **Notes**: 确保 convertedCode 正确生成,literals 正确提取
|
|
47
|
+
|
|
48
|
+
### AC-2: 其他所有测试保持通过
|
|
49
|
+
- **Given**: 修复后的代码
|
|
50
|
+
- **When**: 运行所有 Jest 测试
|
|
51
|
+
- **Then**: 所有 96 个测试保持通过
|
|
52
|
+
- **Verification**: `programmatic`
|
|
53
|
+
|
|
54
|
+
## Open Questions
|
|
55
|
+
- 无
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 修复内插字符串处理 - The Implementation Plan (Decomposed and Prioritized Task List)
|
|
2
|
+
|
|
3
|
+
## [x] Task 1: 修复 processStringTemplates 方法中的变量表达式解析逻辑
|
|
4
|
+
- **Priority**: P0
|
|
5
|
+
- **Depends On**: None
|
|
6
|
+
- **Description**:
|
|
7
|
+
- 在提取内插表达式 `{...}` 时,添加对内部字符串字面量的处理逻辑
|
|
8
|
+
- 在查找匹配的右括号时,跳过字符串字面量内部的内容
|
|
9
|
+
- 实现方法:在查找 `{}` 时,添加字符串状态跟踪(inString, escapeNext, stringDelimiter)
|
|
10
|
+
- 同时修复了查找内插字符串结束引号的问题,确保忽略内部单引号
|
|
11
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2]
|
|
12
|
+
- **Test Requirements**:
|
|
13
|
+
- `programmatic` TR-1.1: 确保 "should handle complex string 3" 测试通过 ✓
|
|
14
|
+
- `programmatic` TR-1.2: 确保所有 96 个现有测试保持通过 ✓
|
|
15
|
+
- **Notes**: 从当前的 braceDepth 循环开始,添加字符串处理逻辑
|
|
16
|
+
|
|
17
|
+
## [x] Task 2: 验证修复是否完整
|
|
18
|
+
- **Priority**: P1
|
|
19
|
+
- **Depends On**: Task 1
|
|
20
|
+
- **Description**:
|
|
21
|
+
- 运行所有测试,确保没有引入新问题
|
|
22
|
+
- 验证修复是否完全符合测试用例的预期
|
|
23
|
+
- **Acceptance Criteria Addressed**: [AC-2]
|
|
24
|
+
- **Test Requirements**:
|
|
25
|
+
- `programmatic` TR-2.1: 运行完整的 Jest 测试套件并确保 100% 通过 ✓
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
# 修复剩余内插字符串测试用例 - Verification Checklist
|
|
3
|
+
|
|
4
|
+
- [x] `should handle special characters in string expression 5` 测试用例成功通过
|
|
5
|
+
- [x] `should handle special characters in string expression 6` 测试用例成功通过
|
|
6
|
+
- [x] 所有 80 个现有测试用例继续通过,无回归问题
|
|
7
|
+
- [x] 对象初始化器中的内插字符串 originalIndex 计算正确
|
|
8
|
+
- [x] 函数调用参数中的内插字符串 originalIndex 计算正确
|
|
9
|
+
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
|
|
2
|
+
# 修复剩余内插字符串测试用例 - Product Requirement Document
|
|
3
|
+
|
|
4
|
+
## Overview
|
|
5
|
+
- **Summary**: 修复剩余的内插字符串测试用例失败问题,特别是 `should handle special characters in string expression 5` 和 `should handle special characters in string expression 6`
|
|
6
|
+
- **Purpose**: 解决测试用例中内插字符串的 originalIndex 不正确的问题,确保所有 80 个测试用例都能通过
|
|
7
|
+
- **Target Users**: 使用 CSharpStringExtractor 工具来扫描和提取 C# 代码中字符串字面量的开发者
|
|
8
|
+
|
|
9
|
+
## Goals
|
|
10
|
+
- 修复 `should handle special characters in string expression 5` 测试用例的失败问题
|
|
11
|
+
- 修复 `should handle special characters in string expression 6` 测试用例的失败问题
|
|
12
|
+
- 确保所有内插字符串的 originalIndex 计算正确
|
|
13
|
+
- 保持所有现有测试用例的通过状态
|
|
14
|
+
|
|
15
|
+
## Non-Goals (Out of Scope)
|
|
16
|
+
- 改变工具的整体架构或 API 接口
|
|
17
|
+
- 添加超出内插字符串索引计算之外的新功能
|
|
18
|
+
|
|
19
|
+
## Background & Context
|
|
20
|
+
- 当前已经修复了内插字符串中 `{{` 和 `}}` 转义序列的处理问题
|
|
21
|
+
- 但是还有几个测试用例失败,问题是 originalIndex 计算不正确(相差 1 个字符)
|
|
22
|
+
- 需要检查索引计算的逻辑,可能与字符串提取过程中的位置计算有关
|
|
23
|
+
|
|
24
|
+
## Functional Requirements
|
|
25
|
+
- **FR-1**: 工具必须正确计算所有内插字符串的 originalIndex
|
|
26
|
+
- **FR-2**: 工具必须正确处理对象初始化器中的内插字符串
|
|
27
|
+
- **FR-3**: 工具必须正确处理函数调用参数中的内插字符串
|
|
28
|
+
|
|
29
|
+
## Non-Functional Requirements
|
|
30
|
+
- **NFR-1**: 所有 80 个现有测试用例必须继续通过
|
|
31
|
+
- **NFR-2**: 修复不能降低工具的性能
|
|
32
|
+
- **NFR-3**: 代码必须遵循 TypeScript 语言规范
|
|
33
|
+
|
|
34
|
+
## Constraints
|
|
35
|
+
- **Technical**: 必须使用 TypeScript 编写,保持现有代码风格和架构
|
|
36
|
+
- **Dependencies**: 不添加任何新的依赖库
|
|
37
|
+
|
|
38
|
+
## Assumptions
|
|
39
|
+
- 问题与索引计算相关,相差 1 个字符通常是因为前导空白或换行符的处理
|
|
40
|
+
- 用户期望的行为符合 C# 语言规范
|
|
41
|
+
|
|
42
|
+
## Acceptance Criteria
|
|
43
|
+
|
|
44
|
+
### AC-1: 剩余内插字符串测试用例通过
|
|
45
|
+
- **Given**: 包含内插字符串的测试用例
|
|
46
|
+
- **When**: 运行所有测试用例
|
|
47
|
+
- **Then**: `should handle special characters in string expression 5` 和 `should handle special characters in string expression 6` 测试用例应该成功通过
|
|
48
|
+
- **Verification**: `programmatic`
|
|
49
|
+
|
|
50
|
+
### AC-2: 所有现有测试继续通过
|
|
51
|
+
- **Given**: 完整的测试套件
|
|
52
|
+
- **When**: 运行所有测试用例
|
|
53
|
+
- **Then**: 所有 80 个现有测试用例应该继续通过
|
|
54
|
+
- **Verification**: `programmatic`
|
|
55
|
+
- **Notes**: 保持向后兼容性
|
|
56
|
+
|
|
57
|
+
## Open Questions
|
|
58
|
+
- 无
|
|
59
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
# 修复剩余内插字符串测试用例 - The Implementation Plan (Decomposed and Prioritized Task List)
|
|
3
|
+
|
|
4
|
+
## [x] 任务 1: 分析索引计算错误的原因
|
|
5
|
+
- **Priority**: P0
|
|
6
|
+
- **Depends On**: None
|
|
7
|
+
- **Description**:
|
|
8
|
+
- 查看对象初始化器和函数调用参数中字符串提取的索引计算逻辑
|
|
9
|
+
- 分析为什么 originalIndex 相差 1 个字符
|
|
10
|
+
- 检查 `extractObjectInitializerStrings` 和 `processObjectInitializerStringsOnly` 方法的实现
|
|
11
|
+
- **Acceptance Criteria Addressed**: [AC-1]
|
|
12
|
+
- **Test Requirements**:
|
|
13
|
+
- `programmatic` TR-1.1: 定位索引计算错误的具体代码位置 ✓
|
|
14
|
+
- `human-judgement` TR-1.2: 理解为什么索引相差 1 个字符 ✓
|
|
15
|
+
- **Notes**: 重点关注对象初始化器和函数调用参数中的字符串索引计算
|
|
16
|
+
|
|
17
|
+
## [x] 任务 2: 修复索引计算问题
|
|
18
|
+
- **Priority**: P0
|
|
19
|
+
- **Depends On**: 任务 1
|
|
20
|
+
- **Description**:
|
|
21
|
+
- 修复对象初始化器中内插字符串的 originalIndex 计算
|
|
22
|
+
- 修复函数调用参数中内插字符串的 originalIndex 计算
|
|
23
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2]
|
|
24
|
+
- **Test Requirements**:
|
|
25
|
+
- `programmatic` TR-2.1: 修复后 `should handle special characters in string expression 5` 测试用例必须通过 ✓
|
|
26
|
+
- `programmatic` TR-2.2: 修复后 `should handle special characters in string expression 6` 测试用例必须通过 ✓
|
|
27
|
+
- `programmatic` TR-2.3: 所有其他测试用例继续通过,无回归 ✓
|
|
28
|
+
- **Notes**: 确保修改不会影响其他类型字符串的索引计算
|
|
29
|
+
- **Modifications**: 在 `extractObjectInitializerStrings` 和 `processObjectInitializerStringsOnly` 方法中添加了对 `$"`, `$@"`, `@$"` 内插字符串的支持
|
|
30
|
+
|
|
31
|
+
## [x] 任务 3: 运行所有测试确保没有回归
|
|
32
|
+
- **Priority**: P0
|
|
33
|
+
- **Depends On**: 任务 2
|
|
34
|
+
- **Description**:
|
|
35
|
+
- 运行完整的测试套件,确保所有测试用例都能通过
|
|
36
|
+
- 检查是否有任何测试出现回归
|
|
37
|
+
- **Acceptance Criteria Addressed**: [AC-2]
|
|
38
|
+
- **Test Requirements**:
|
|
39
|
+
- `programmatic` TR-3.1: 运行 `npm test` 命令,所有 80 个测试用例必须通过 ✓
|
|
40
|
+
- **Notes**: 确保修复不会破坏任何现有功能
|
|
41
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
|
|
2
|
+
# 修复 return 语句中的内插字符串处理 - Product Requirement Document
|
|
3
|
+
|
|
4
|
+
## Overview
|
|
5
|
+
- **Summary**: 修复 return 语句中内插字符串的处理问题,确保 return 语句中的内插字符串能够被正确提取和转换
|
|
6
|
+
- **Purpose**: 解决测试用例 `should handle special characters in string expression 7` 的失败问题,问题是 return 语句中的内插字符串没有被正确处理,导致 convertedCode 变成了错误的 "yz`-=[]" 片段
|
|
7
|
+
- **Target Users**: 使用 CSharpStringExtractor 工具来扫描和提取 C# 代码中字符串字面量的开发者
|
|
8
|
+
|
|
9
|
+
## Goals
|
|
10
|
+
- 修复 `should handle special characters in string expression 7` 测试用例的失败问题
|
|
11
|
+
- 确保 return 语句中的内插字符串能够被正确识别和处理
|
|
12
|
+
- 确保 return 语句中的内插字符串能够被正确转换为 Tr.Format 调用
|
|
13
|
+
- 保持所有现有测试用例的通过状态
|
|
14
|
+
|
|
15
|
+
## Non-Goals (Out of Scope)
|
|
16
|
+
- 改变工具的整体架构或 API 接口
|
|
17
|
+
- 添加超出 return 语句处理之外的新功能
|
|
18
|
+
|
|
19
|
+
## Background & Context
|
|
20
|
+
- 当前已经修复了对象初始化器和函数调用参数中内插字符串的处理问题
|
|
21
|
+
- 但是 return 语句中的内插字符串还有问题,测试 7 失败
|
|
22
|
+
- 问题可能出在 `processStatementAndExtractValue` 方法中处理 return 语句的部分
|
|
23
|
+
|
|
24
|
+
## Functional Requirements
|
|
25
|
+
- **FR-1**: 工具必须正确处理 return 语句中的内插字符串
|
|
26
|
+
- **FR-2**: 工具必须正确提取 return 语句中的内插字符串
|
|
27
|
+
- **FR-3**: 工具必须正确将 return 语句中的内插字符串转换为 Tr.Format 调用
|
|
28
|
+
|
|
29
|
+
## Non-Functional Requirements
|
|
30
|
+
- **NFR-1**: 所有 82 个现有测试用例必须继续通过
|
|
31
|
+
- **NFR-2**: 修复不能降低工具的性能
|
|
32
|
+
- **NFR-3**: 代码必须遵循 TypeScript 语言规范
|
|
33
|
+
|
|
34
|
+
## Constraints
|
|
35
|
+
- **Technical**: 必须使用 TypeScript 编写,保持现有代码风格和架构
|
|
36
|
+
- **Dependencies**: 不添加任何新的依赖库
|
|
37
|
+
|
|
38
|
+
## Assumptions
|
|
39
|
+
- 问题出在 processStatementAndExtractValue 方法的 return 语句处理部分
|
|
40
|
+
- 用户期望的行为符合 C# 语言规范
|
|
41
|
+
|
|
42
|
+
## Acceptance Criteria
|
|
43
|
+
|
|
44
|
+
### AC-1: Return 语句内插字符串测试通过
|
|
45
|
+
- **Given**: 包含 return 语句和内插字符串的测试用例
|
|
46
|
+
- **When**: 运行 `should handle special characters in string expression 7` 测试
|
|
47
|
+
- **Then**: 该测试用例应该成功通过,不出现任何错误
|
|
48
|
+
- **Verification**: `programmatic`
|
|
49
|
+
- **Notes**: 确保 return 语句中的内插字符串被正确转换为 Tr.Format 调用
|
|
50
|
+
|
|
51
|
+
### AC-2: 所有现有测试继续通过
|
|
52
|
+
- **Given**: 完整的测试套件
|
|
53
|
+
- **When**: 运行所有测试用例
|
|
54
|
+
- **Then**: 所有 82 个现有测试用例应该继续通过
|
|
55
|
+
- **Verification**: `programmatic`
|
|
56
|
+
- **Notes**: 保持向后兼容性
|
|
57
|
+
|
|
58
|
+
## Open Questions
|
|
59
|
+
- 无
|
|
60
|
+
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
|
|
2
|
+
# 修复 return 语句中的内插字符串处理 - The Implementation Plan (Decomposed and Prioritized Task List)
|
|
3
|
+
|
|
4
|
+
## [/] 任务 1: 分析 return 语句中内插字符串处理的问题
|
|
5
|
+
- **Priority**: P0
|
|
6
|
+
- **Depends On**: None
|
|
7
|
+
- **Description**:
|
|
8
|
+
- 查看 `processStatementAndExtractValue` 方法中处理 return 语句的逻辑
|
|
9
|
+
- 分析为什么 convertedCode 变成了 "yz`-=[]" 而不是正确的 Tr.Format 调用
|
|
10
|
+
- 检查当 return 语句中的字符串被 processStringTemplates 处理后,后续的提取逻辑是否正确
|
|
11
|
+
- **Acceptance Criteria Addressed**: [AC-1]
|
|
12
|
+
- **Test Requirements**:
|
|
13
|
+
- `programmatic` TR-1.1: 定位 return 语句中内插字符串处理错误的具体代码位置
|
|
14
|
+
- `human-judgement` TR-1.2: 理解为什么提取错误的 "yz`-=[]" 片段
|
|
15
|
+
- **Notes**: 重点关注 processStatementAndExtractValue 方法中的 return 语句处理
|
|
16
|
+
|
|
17
|
+
## [ ] 任务 2: 修复 return 语句中的内插字符串处理
|
|
18
|
+
- **Priority**: P0
|
|
19
|
+
- **Depends On**: 任务 1
|
|
20
|
+
- **Description**:
|
|
21
|
+
- 修复 `processStatementAndExtractValue` 方法中处理 return 语句的逻辑
|
|
22
|
+
- 确保当 processStringTemplates 处理完内插字符串后,后续的 value 提取逻辑能正确地获取完整的 Tr.Format 调用
|
|
23
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2]
|
|
24
|
+
- **Test Requirements**:
|
|
25
|
+
- `programmatic` TR-2.1: 修复后 `should handle special characters in string expression 7` 测试用例必须通过
|
|
26
|
+
- `programmatic` TR-2.2: 所有其他测试用例继续通过,无回归
|
|
27
|
+
- **Notes**: 确保修改不会影响其他类型语句的处理
|
|
28
|
+
|
|
29
|
+
## [ ] 任务 3: 运行所有测试确保没有回归
|
|
30
|
+
- **Priority**: P0
|
|
31
|
+
- **Depends On**: 任务 2
|
|
32
|
+
- **Description**:
|
|
33
|
+
- 运行完整的测试套件,确保所有测试用例都能通过
|
|
34
|
+
- 检查是否有任何测试出现回归
|
|
35
|
+
- **Acceptance Criteria Addressed**: [AC-2]
|
|
36
|
+
- **Test Requirements**:
|
|
37
|
+
- `programmatic` TR-3.1: 运行 `npm test` 命令,所有 82 个测试用例必须通过
|
|
38
|
+
- **Notes**: 确保修复不会破坏任何现有功能
|
|
39
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
# 处理内插字符串中的双花括号 - Verification Checklist
|
|
3
|
+
|
|
4
|
+
- [x] `should handle special characters in string expression 4` 测试用例成功通过
|
|
5
|
+
- [x] 所有 79 个现有测试用例继续通过,无回归问题
|
|
6
|
+
- [x] 内插字符串中的 `{{` 转义序列被正确处理,保持原样
|
|
7
|
+
- [x] 内插字符串中的 `}}` 转义序列被正确处理,保持原样
|
|
8
|
+
- [x] 单个 `{expr}` 内插表达式被正确替换为 `{0}`, `{1}` 等
|
|
9
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
|
|
2
|
+
# 处理内插字符串中的双花括号 - Product Requirement Document
|
|
3
|
+
|
|
4
|
+
## Overview
|
|
5
|
+
- **Summary**: 修复 CSharpStringExtractor 工具中内插字符串($"")处理双花括号 `{{` 和 `}}` 的逻辑,确保这些转义字符被正确地保持原样,而不是被错误地识别为多个独立的内插表达式
|
|
6
|
+
- **Purpose**: 解决内插字符串中包含 `{{` 和 `}}` 时,它们被错误地识别为多个独立内插表达式的问题,确保正确的转义处理
|
|
7
|
+
- **Target Users**: 使用 CSharpStringExtractor 工具来扫描和提取 C# 代码中字符串字面量的开发者
|
|
8
|
+
|
|
9
|
+
## Goals
|
|
10
|
+
- 修复 `should handle special characters in string expression 4` 测试用例的失败问题
|
|
11
|
+
- 确保内插字符串中的 `{{` 和 `}}` 被正确识别为转义字符,保持原样转换到 Tr.Format 中
|
|
12
|
+
- 确保单个 `{xxx}` 被正确识别为内插表达式并替换为 `{0}`, `{1}` 等
|
|
13
|
+
- 保持所有现有测试用例的通过状态
|
|
14
|
+
|
|
15
|
+
## Non-Goals (Out of Scope)
|
|
16
|
+
- 改变工具的整体架构或 API 接口
|
|
17
|
+
- 添加超出内插字符串处理之外的新功能
|
|
18
|
+
|
|
19
|
+
## Background & Context
|
|
20
|
+
- 目前 `processStringTemplates` 方法处理内插字符串时,没有正确处理 `{{` 和 `}}` 的转义情况
|
|
21
|
+
- 在内插字符串中,`{{` 表示单个 `{`,`}}` 表示单个 `}`,不应该被当作内插表达式处理
|
|
22
|
+
- 测试用例 `should handle special characters in string expression 4` 测试这个功能,但目前失败了
|
|
23
|
+
|
|
24
|
+
## Functional Requirements
|
|
25
|
+
- **FR-1**: 工具必须正确处理内插字符串中的 `{{` 转义序列,保持原样
|
|
26
|
+
- **FR-2**: 工具必须正确处理内插字符串中的 `}}` 转义序列,保持原样
|
|
27
|
+
- **FR-3**: 工具必须正确区分转义的 `{{`/`}}` 和单个 `{`/`}` 组成的内插表达式
|
|
28
|
+
- **FR-4**: 工具必须正确处理同时包含转义双花括号和普通内插表达式的情况
|
|
29
|
+
|
|
30
|
+
## Non-Functional Requirements
|
|
31
|
+
- **NFR-1**: 所有 79 个现有测试用例必须继续通过
|
|
32
|
+
- **NFR-2**: 修复不能降低工具的性能
|
|
33
|
+
- **NFR-3**: 代码必须遵循 TypeScript 语言规范
|
|
34
|
+
|
|
35
|
+
## Constraints
|
|
36
|
+
- **Technical**: 必须使用 TypeScript 编写,保持现有代码风格和架构
|
|
37
|
+
- **Dependencies**: 不添加任何新的依赖库
|
|
38
|
+
|
|
39
|
+
## Assumptions
|
|
40
|
+
- C# 内插字符串语法规则:`{{` → `{`, `}}` → `}`, `{expr}` → 内插表达式
|
|
41
|
+
- 用户期望的行为符合 C# 语言规范
|
|
42
|
+
|
|
43
|
+
## Acceptance Criteria
|
|
44
|
+
|
|
45
|
+
### AC-1: 内插字符串双花括号测试通过
|
|
46
|
+
- **Given**: 包含 `{{` 和 `}}` 的内插字符串测试用例
|
|
47
|
+
- **When**: 运行 `should handle special characters in string expression 4` 测试
|
|
48
|
+
- **Then**: 该测试用例应该成功通过,不出现任何错误
|
|
49
|
+
- **Verification**: `programmatic`
|
|
50
|
+
- **Notes**: 确保 `{{` 和 `}}` 在转换后的字符串中保持原样
|
|
51
|
+
|
|
52
|
+
### AC-2: 所有现有测试继续通过
|
|
53
|
+
- **Given**: 完整的测试套件
|
|
54
|
+
- **When**: 运行所有测试用例
|
|
55
|
+
- **Then**: 所有 79 个现有测试用例应该继续通过
|
|
56
|
+
- **Verification**: `programmatic`
|
|
57
|
+
- **Notes**: 保持向后兼容性
|
|
58
|
+
|
|
59
|
+
## Open Questions
|
|
60
|
+
- 无
|
|
61
|
+
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
|
|
2
|
+
# 处理内插字符串中的双花括号 - The Implementation Plan (Decomposed and Prioritized Task List)
|
|
3
|
+
|
|
4
|
+
## [x] 任务 1: 分析当前 processStringTemplates 方法的问题
|
|
5
|
+
- **Priority**: P0
|
|
6
|
+
- **Depends On**: None
|
|
7
|
+
- **Description**:
|
|
8
|
+
- 查看 `processStringTemplates` 方法的实现,分析为什么 `{{` 和 `}}` 被错误处理
|
|
9
|
+
- 了解当前正则表达式 `/\{([^}]*?)\}/g` 如何匹配内插表达式
|
|
10
|
+
- 理解为什么 `{{` 被当作两个独立的 `{` 处理
|
|
11
|
+
- **Acceptance Criteria Addressed**: [AC-1]
|
|
12
|
+
- **Test Requirements**:
|
|
13
|
+
- `programmatic` TR-1.1: 定位双花括号被错误处理的具体代码位置 ✓
|
|
14
|
+
- `human-judgement` TR-1.2: 理解当前逻辑中的问题所在 ✓
|
|
15
|
+
- **Notes**: 重点关注内插字符串模板匹配的正则表达式或手动解析逻辑
|
|
16
|
+
|
|
17
|
+
## [x] 任务 2: 修复 processStringTemplates 方法以正确处理双花括号
|
|
18
|
+
- **Priority**: P0
|
|
19
|
+
- **Depends On**: 任务 1
|
|
20
|
+
- **Description**:
|
|
21
|
+
- 重写或修改 `processStringTemplates` 方法中的内插表达式匹配逻辑
|
|
22
|
+
- 确保首先检查 `{{` 和 `}}` 转义序列并保持原样
|
|
23
|
+
- 然后再处理单个 `{expr}` 内插表达式
|
|
24
|
+
- **Acceptance Criteria Addressed**: [AC-1, AC-2]
|
|
25
|
+
- **Test Requirements**:
|
|
26
|
+
- `programmatic` TR-2.1: 修复后 `should handle special characters in string expression 4` 测试用例必须通过 ✓
|
|
27
|
+
- `programmatic` TR-2.2: 所有其他测试用例继续通过,无回归 ✓
|
|
28
|
+
- **Notes**: 确保修改不会影响普通内插表达式的处理
|
|
29
|
+
- **Modifications**: 重写了 `processStringTemplates` 方法(src/CSharpStringExtractor.ts:972-1055),采用手动解析方式,优先处理 {{ 和 }} 转义序列
|
|
30
|
+
|
|
31
|
+
## [x] 任务 3: 运行所有测试确保没有回归
|
|
32
|
+
- **Priority**: P0
|
|
33
|
+
- **Depends On**: 任务 2
|
|
34
|
+
- **Description**:
|
|
35
|
+
- 运行完整的测试套件,确保所有测试用例都能通过
|
|
36
|
+
- 检查是否有任何测试出现回归
|
|
37
|
+
- **Acceptance Criteria Addressed**: [AC-2]
|
|
38
|
+
- **Test Requirements**:
|
|
39
|
+
- `programmatic` TR-3.1: 运行 `npm test` 命令,所有 79 个测试用例必须通过 ✓
|
|
40
|
+
- **Notes**: 确保修复不会破坏任何现有功能
|
|
41
|
+
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# 处理 C# Return 语句 - Verification Checklist
|
|
2
|
+
|
|
3
|
+
- [x] isStatementToProcess 能正确识别包含字符串的 return 语句
|
|
4
|
+
- [x] isStatementToProcess 不会错误地识别不包含字符串的 return 语句
|
|
5
|
+
- [x] extractValueExpression 能正确从 return 语句中提取字符串表达式
|
|
6
|
+
- [x] 提取的字符串表达式不包含 "return" 关键字
|
|
7
|
+
- [x] valueExpressionIndex 正确指向字符串的起始位置
|
|
8
|
+
- [x] "should handle return statement" 测试通过
|
|
9
|
+
- [x] 所有现有测试用例都通过
|
|
10
|
+
- [x] 代码风格与项目保持一致
|
|
11
|
+
- [x] 没有引入新的语法错误或类型错误
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# 处理 C# Return 语句 - Product Requirement Document
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
- **Summary**: 修复 CSharpStringExtractor 无法处理 C# `return` 语句中字符串字面量的问题,确保 return 语句中的字符串表达式能够被正确提取
|
|
5
|
+
- **Purpose**: 解决 `return "参数错误";` 等语句中字符串字面量无法被提取和处理的问题
|
|
6
|
+
- **Target Users**: 使用 CSharpStringExtractor 进行 C# 代码字符串字面量提取和国际化处理的开发者
|
|
7
|
+
|
|
8
|
+
## Goals
|
|
9
|
+
- 修改 `isStatementToProcess` 函数,允许处理以 "return " 开头的语句
|
|
10
|
+
- 修改 `extractValueExpression` 函数,正确提取 return 语句中的字符串值表达式
|
|
11
|
+
- 确保提取的字符串表达式不包含 "return" 关键字本身
|
|
12
|
+
- 保持现有功能不被破坏
|
|
13
|
+
|
|
14
|
+
## Non-Goals (Out of Scope)
|
|
15
|
+
- 不修改其他语句类型的处理逻辑
|
|
16
|
+
- 不添加额外的新功能,只修复 return 语句的处理问题
|
|
17
|
+
- 不重构整个代码库
|
|
18
|
+
|
|
19
|
+
## Background & Context
|
|
20
|
+
- CSharpStringExtractor 是一个用于提取 C# 代码中字符串字面量的工具
|
|
21
|
+
- 当前版本在处理 `return "参数错误";` 语句时无法正确提取字符串
|
|
22
|
+
- 测试用例 `should handle return statement` 专门测试这个功能
|
|
23
|
+
- 需要保持与项目现有架构和编码规范一致
|
|
24
|
+
|
|
25
|
+
## Functional Requirements
|
|
26
|
+
- **FR-1**: `isStatementToProcess` 函数应能识别并允许处理以 "return " 开头的语句
|
|
27
|
+
- **FR-2**: `extractValueExpression` 函数应能从 return 语句中正确提取字符串值表达式
|
|
28
|
+
- **FR-3**: 提取的字符串表达式不应包含 "return" 关键字
|
|
29
|
+
- **FR-4**: return 语句的处理应与其他语句类型保持一致的行为
|
|
30
|
+
|
|
31
|
+
## Non-Functional Requirements
|
|
32
|
+
- **NFR-1**: 代码修改应保持可维护性和性能
|
|
33
|
+
- **NFR-2**: 修改不应影响现有功能
|
|
34
|
+
- **NFR-3**: 代码应与项目现有编码风格保持一致
|
|
35
|
+
|
|
36
|
+
## Constraints
|
|
37
|
+
- **Technical**: 使用 TypeScript,遵循现有代码架构
|
|
38
|
+
- **Business**: 需要通过现有所有测试用例,特别是 "should handle return statement" 测试
|
|
39
|
+
- **Dependencies**: 依赖现有的 CSharpStringExtractor.ts 代码结构
|
|
40
|
+
|
|
41
|
+
## Assumptions
|
|
42
|
+
- return 语句的结构是 "return " + 字符串表达式 + ";"
|
|
43
|
+
- return 语句中的字符串表达式不包含复杂的条件表达式(测试用例只覆盖简单情况)
|
|
44
|
+
- 现有代码结构是稳定的,可以在其基础上进行修改
|
|
45
|
+
|
|
46
|
+
## Acceptance Criteria
|
|
47
|
+
|
|
48
|
+
### AC-1: isStatementToProcess 能识别 return 语句
|
|
49
|
+
- **Given**: 一个包含 "return " 开头的语句字符串
|
|
50
|
+
- **When**: 调用 `isStatementToProcess` 函数检查该语句
|
|
51
|
+
- **Then**: 函数应返回 true,表明该语句需要处理
|
|
52
|
+
- **Verification**: `programmatic`
|
|
53
|
+
- **Notes**: 确保只识别 "return " 开头的语句,避免误识别其他以 "return" 开头的标识符
|
|
54
|
+
|
|
55
|
+
### AC-2: extractValueExpression 能正确提取 return 语句的字符串
|
|
56
|
+
- **Given**: 一个完整的 return 语句,如 `return "参数错误";`
|
|
57
|
+
- **When**: 调用 `extractValueExpression` 函数处理该语句
|
|
58
|
+
- **Then**: 函数应返回字符串表达式 `"参数错误"`,不包含 "return" 关键字
|
|
59
|
+
- **Verification**: `programmatic`
|
|
60
|
+
- **Notes**: 同时确保 valueExpressionIndex 指向字符串的起始位置
|
|
61
|
+
|
|
62
|
+
### AC-3: 完整的 return 语句处理流程正确
|
|
63
|
+
- **Given**: 代码字符串 `return "参数错误";`
|
|
64
|
+
- **When**: 调用 `extractStrings` 函数处理该代码
|
|
65
|
+
- **Then**: 返回的 snippets 数组应包含一个 snippet,其 originalCode 为 `"参数错误"`,originalIndex 为字符串在原代码中的起始位置
|
|
66
|
+
- **Verification**: `programmatic`
|
|
67
|
+
- **Notes**: 这就是测试用例 "should handle return statement" 的要求
|
|
68
|
+
|
|
69
|
+
### AC-4: 现有功能不受影响
|
|
70
|
+
- **Given**: 修改后的代码库
|
|
71
|
+
- **When**: 运行所有现有测试用例
|
|
72
|
+
- **Then**: 所有测试用例都应通过
|
|
73
|
+
- **Verification**: `programmatic`
|
|
74
|
+
|
|
75
|
+
## Open Questions
|
|
76
|
+
- 是否需要处理更复杂的 return 语句,如 `return condition ? "a" : "b";`?(测试用例未覆盖此场景)
|