# 修正字符串表达式捕获范围 - Product Requirement Document

## Overview

* **Summary**: 修正 `CSharpStringExtractor` 中函数调用参数内字符串插值表达式的 `originalIndex` 计算问题

* **Purpose**: 解决测试用例中 `originalIndex` 与期望值不符的问题，确保正确捕获字符串表达式的起始位置

* **Target Users**: 使用 `CSharpStringExtractor` 进行 C# 代码国际化处理的开发者

## Goals

* 修正函数调用参数内字符串插值表达式的 `originalIndex` 计算

* 确保所有新增测试用例能够正确通过

* 保持现有功能的正常工作

## Non-Goals (Out of Scope)

* 不修改其他无关的代码逻辑

* 不新增测试用例（使用已有测试）

* 不重构现有代码结构

## Ba**ckground & Context**

* **测试用例显示，函数调用参数内的字符串插值表达式（如** **`$"vwvwe{index + 1}"`）的** **`originalIndex`** **计算不正确**

* **期望的** **`originalIndex`** **是字符串在原始代码中的实际位置，但实际返回的值偏离了10个字符**

* **问题出在** **`processAllFunctionCallsInRange`** **函数中处理字符串位置的逻辑**

## **Functional R**equirements

* **FR-1**: 函数调用参数内的普通字符串字面量的 `originalIndex` 必须正确

* **FR-2**: 函数调用参数内的字符串插值表达式（`$"..."`）的 `originalIndex` 必须正确

* **FR-3**: 函数调用参数内的逐字字符串插值（`$@"..."`、`@$"..."`）的 `originalIndex` 必须正确

## Non-Functional Requirements

* **NFR-1**: 所有现有测试用例必须继续通过

* **NFR-2**: 性能不能有明显下降

* **NFR-3**: 代码变更必须是最小的，只修复问题相关的部分

## Constraints

* **Technical**: 必须使用 TypeScript 语言，不使用 HTML 实体编码，不使用保留字段作为变量名

* **Business**: 必须在不破坏现有功能的前提下修复问题

* **Dependencies**: 依赖现有的 Jest 测试框架

## Assumptions

* 测试用例的期望是正确的

* 只有 `originalIndex` 的计算有问题，其他功能正常

* 问题只出现在函数调用参数内的字符串处理

## Acceptance Criteria

### AC-1: 正确计算字符串插值表达式的 originalIndex

* **Given**: 有一个包含函数调用参数内字符串插值的 C# 代码

* **When**: 调用 `extractor.extractStrings(code)` 处理代码

* **Then**: 返回的 snippet 的 `originalIndex` 必须等于字符串在原始代码中的实际索引位置

* **Verification**: `programmatic`

* **Notes**: 验证测试用例 "should handle special characters in string 8" 的所有实例

### AC-2: 所有现有测试继续通过

* **Given**: 所有已有的 Jest 测试用例

* **When**: 运行完整的测试套件

* **Then**: 所有测试用例必须通过

* **Verification**: `programmatic`

* **Notes**: 确保没有引入新的问题

## Open Questions

* 无

