
# 处理内插字符串中的双花括号 - Product Requirement Document

## Overview
- **Summary**: 修复 CSharpStringExtractor 工具中内插字符串（$""）处理双花括号 `{{` 和 `}}` 的逻辑，确保这些转义字符被正确地保持原样，而不是被错误地识别为多个独立的内插表达式
- **Purpose**: 解决内插字符串中包含 `{{` 和 `}}` 时，它们被错误地识别为多个独立内插表达式的问题，确保正确的转义处理
- **Target Users**: 使用 CSharpStringExtractor 工具来扫描和提取 C# 代码中字符串字面量的开发者

## Goals
- 修复 `should handle special characters in string expression 4` 测试用例的失败问题
- 确保内插字符串中的 `{{` 和 `}}` 被正确识别为转义字符，保持原样转换到 Tr.Format 中
- 确保单个 `{xxx}` 被正确识别为内插表达式并替换为 `{0}`, `{1}` 等
- 保持所有现有测试用例的通过状态

## Non-Goals (Out of Scope)
- 改变工具的整体架构或 API 接口
- 添加超出内插字符串处理之外的新功能

## Background &amp; Context
- 目前 `processStringTemplates` 方法处理内插字符串时，没有正确处理 `{{` 和 `}}` 的转义情况
- 在内插字符串中，`{{` 表示单个 `{`，`}}` 表示单个 `}`，不应该被当作内插表达式处理
- 测试用例 `should handle special characters in string expression 4` 测试这个功能，但目前失败了

## Functional Requirements
- **FR-1**: 工具必须正确处理内插字符串中的 `{{` 转义序列，保持原样
- **FR-2**: 工具必须正确处理内插字符串中的 `}}` 转义序列，保持原样
- **FR-3**: 工具必须正确区分转义的 `{{`/`}}` 和单个 `{`/`}` 组成的内插表达式
- **FR-4**: 工具必须正确处理同时包含转义双花括号和普通内插表达式的情况

## Non-Functional Requirements
- **NFR-1**: 所有 79 个现有测试用例必须继续通过
- **NFR-2**: 修复不能降低工具的性能
- **NFR-3**: 代码必须遵循 TypeScript 语言规范

## Constraints
- **Technical**: 必须使用 TypeScript 编写，保持现有代码风格和架构
- **Dependencies**: 不添加任何新的依赖库

## Assumptions
- C# 内插字符串语法规则：`{{` → `{`, `}}` → `}`, `{expr}` → 内插表达式
- 用户期望的行为符合 C# 语言规范

## Acceptance Criteria

### AC-1: 内插字符串双花括号测试通过
- **Given**: 包含 `{{` 和 `}}` 的内插字符串测试用例
- **When**: 运行 `should handle special characters in string expression 4` 测试
- **Then**: 该测试用例应该成功通过，不出现任何错误
- **Verification**: `programmatic`
- **Notes**: 确保 `{{` 和 `}}` 在转换后的字符串中保持原样

### AC-2: 所有现有测试继续通过
- **Given**: 完整的测试套件
- **When**: 运行所有测试用例
- **Then**: 所有 79 个现有测试用例应该继续通过
- **Verification**: `programmatic`
- **Notes**: 保持向后兼容性

## Open Questions
- 无

