# 匿名函数字符串提取 - Product Requirement Document

## Overview

* **Summary**: 修改 CSharpStringExtractor 类，使其能够正确识别和提取 C# 代码中匿名函数内的字符串表达式。

* **Purpose**: 解决当前代码无法处理匿名函数中字符串提取的问题，确保匿名函数中的字符串也能被正确国际化。

* **Target Users**: Unity 项目开发者，使用此工具进行 C# 代码国际化。

## Goals

* 正确识别 C# 代码中的匿名函数

* 提取匿名函数内的字符串表达式

* 支持多种形式的匿名函数定义（带修饰词、带参数、不带参数、有大括号、无大括号）

* 确保匿名函数内的字符串与其他字符串一起按正确顺序返回

* 保持现有功能不变

## Non-Goals (Out of Scope)

* 不修改字符串处理的核心逻辑

* 不改变已有的测试用例

* 不添加新的功能，除了匿名函数字符串提取

## Background & Context

* 当前代码可以处理对象初始化器和类成员初始化中的字符串，但无法处理赋值给成员的匿名函数内的字符串

* 匿名函数常见形式：`() => { ... }`、`async () => { ... }`、`(param) => expression`

* 测试用例位于 test/CSharpStringExtractor.test.ts:2333-2478

## Functional Requirements

* **FR-1**: 支持提取对象初始化器中赋值给成员的匿名函数内的字符串

* **FR-2**: 支持带 async 修饰词的匿名函数

* **FR-3**: 支持带参数和不带参数的匿名函数

* **FR-4**: 支持有大括号和无大括号的匿名函数表达式

* **FR-5**: 支持匿名函数内的普通字符串和内插字符串

# Non-Functional Requirements

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

* **NFR-2**: 性能不应受到明显影响
* **NFR-3**: 代码必须严格遵循 TypeScript 语法

## Constraints

* **Technical**: 使用 TypeScript，不使用 HTML 实体编码，不使用 arguments 等保留字段名

* **Business**: 必须通过指定的测试用例

* **Dependencies**: 依赖 Jest 测试框架

## Assumptions

* 匿名函数总是出现在对象初始化器或类成员赋值的场景中

* 匿名函数的边界可以通过大括号匹配或箭头符号确定

## Acceptance Criteria

### AC-1: 处理对象初始化器中匿名函数内的字符串

* **Given**: 有一个对象初始化器，其中某个成员被赋值为一个包含字符串的匿名函数

* **When**: extractStrings 方法被调用处理此代码

* **Then**: 匿名函数内的字符串被正确提取，并且按原始顺序返回

* **Verification**: `programmatic`

### AC-2: 处理带 async 修饰词的匿名函数

* **Given**: 有一个带 async 修饰词的匿名函数，其中包含字符串

* **When**: extractStrings 方法被调用处理此代码

* **Then**: 匿名函数内的字符串被正确提取

* **Verification**: `programmatic`

### AC-3: 处理带参数的匿名函数

* **Given**: 有一个带参数的匿名函数，其中包含字符串

* **When**: extractStrings 方法被调用处理此代码

* **Then**: 匿名函数内的字符串被正确提取

* **Verification**: `programmatic`

### AC-4: 处理无大括号的匿名函数表达式

* **Given**: 有一个无大括号的匿名函数表达式，其中包含字符串

* **When**: extractStrings 方法被调用处理此代码

* **Then**: 匿名函数内的字符串被正确提取

* **Verification**: `programmatic`

### AC-5: 处理匿名函数内的内插字符串

* **Given**: 有一个匿名函数，其中包含内插字符串

* **When**: extractStrings 方法被调用处理此代码

* **Then**: 内插字符串被正确提取和转换

* **Verification**: `programmatic`

### AC-6: 保持现有功能不变

* **Given**: 所有现有的测试用例

* **When**: 运行测试

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

* **Verification**: `programmatic`

## Open Questions

* 无

