# 内插字符串处理增强 - Product Requirement Document

## Overview
- **Summary**: 增强 `CSharpStringExtractor` 类中的 `processFunctionCallArguments` 方法，使其能够正确处理 C# 内插字符串（以 $ 开头的字符串），包括 $""、@$"" 和 $@"" 格式。
- **Purpose**: 解决三个目标测试用例失败的问题，确保函数调用参数中的内插字符串能够被正确识别、处理，同时保持所有现有测试用例继续通过。
- **Target Users**: 开发者，使用该代码扫描工具提取 C# 字符串进行国际化处理的开发人员。

## Goals
- 使 `processFunctionCallArguments` 方法能够正确识别和处理内插字符串
- 确保三个目标测试用例能够通过：
  1. should handle right value expression
  2. should handle special characters in string 8
  3. should handle assignment expression with both sides strings
- 保持所有现有测试用例继续通过
- 保持与代码库中其他处理内插字符串方法的一致性

## Non-Goals (Out of Scope)
- 不修改除 `processFunctionCallArguments` 方法以外的其他方法的主要逻辑
- 不重构整个代码库的架构
- 不引入新的依赖

## Background & Context
- 当前 `CSharpStringExtractor` 类负责从 C# 代码中提取字符串并进行国际化处理
- 该类已经有多个方法已经支持内插字符串处理，如 `extractClassMemberStrings`、`extractObjectInitializerStrings` 等
- 但 `processFunctionCallArguments` 方法目前只支持普通字符串字面量，不支持内插字符串
- 三个目标测试用例当前失败，需要修复

## Functional Requirements
- **FR-1**: `processFunctionCallArguments` 方法能识别内插字符串格式：$""
- **FR-2**: `processFunctionCallArguments` 方法能识别 @$"" 和 $@"" 格式的内插字符串
- **FR-3**: 正确计算内插字符串的起始位置和结束位置
- **FR-4**: 正确处理内插字符串中的特殊字符
- **FR-5**: 确保 originalIndex 值正确设置为内插字符串的起始位置

## Non-Functional Requirements
- **NFR-1**: 所有现有测试必须继续通过
- **NFR-2**: 三个目标测试必须通过
- **NFR-3**: 保持代码风格和现有方法保持一致

## Constraints
- **Technical**: 使用 TypeScript，遵循现有代码风格
- **Business**: 无特定时间限制，但需要保持代码稳定
- **Dependencies**: 无额外依赖

## Assumptions
- 内插字符串的处理方式可以参考 `extractClassMemberStrings`、`extractObjectInitializerStrings` 等方法
- 内插字符串需要被正确处理为与普通字符串一样被识别和收集
- 内插字符串的 originalIndex 应该设置为 `$` 字符的位置

## Acceptance Criteria

### AC-1: 正确处理右值表达式中的内插字符串
- **Given**: 有一个 C# 代码，函数调用参数中包含内插字符串
- **When**: 调用 extractStrings 方法
- **Then**: 内插字符串被正确提取，originalIndex 正确，snippets 数组中包含正确的片段
- **Verification**: `programmatic`
- **Notes**: 通过 should handle right value expression 测试用例通过

### AC-2: 正确处理包含特殊字符的内插字符串
- **Given**: 有一个 C# 代码，内插字符串包含特殊字符
- **When**: 调用 extractStrings 方法
- **Then**: 内插字符串被正确提取，只产生一个 CodeSnippet，originalIndex 正确
- **Verification**: `programmatic`
- **Notes**: 通过 should handle special characters in string 8 测试用例通过

### AC-3: 正确处理赋值表达式两边都有字符串的情况
- **Given**: 有一个 C# 赋值表达式，左右两边都有字符串
- **When**: 调用 extractStrings 方法
- **Then**: 两个字符串都被正确提取，originalIndex 都正确
- **Verification**: `programmatic`
- **Notes**: 通过 should handle assignment expression with both sides strings 测试用例通过

### AC-4: 所有现有测试用例继续通过
- **Given**: 完整的测试套件
- **When**: 运行完整测试
- **Then**: 所有现有 113 个测试继续通过
- **Verification**: `programmatic`

## Open Questions
- 无
