用途:在 microsoft/microsoft-ui-reactor 仓库中新增或移除 Roslyn 诊断(REACTOR_)及其 mur check CLI 对应规则,用于提示作者改用正确的 Reactor DSL,即“did-you-mean”式建议。触发场景包括“add a REACTOR_ diagnostic”“did-you-mean for”“add/remove a mur check rule”“suggest the correct factory/argument”“in-build suggestion”“fuzzy-match the DSL name”。不适用于与建议无关的一般分析器修复,或仅需微调的既有主题/无障碍分析器。
主要能力与约束:先读 AGENTS.md,再读 docs/specs/061-in-build-did-you-mean.md,并参照 src/Reactor.Analyzers/ 中最接近的现有分析器及其 src/Reactor.Cli/Check/ 下的 CLI 镜像,复制现有模式而非自创。src/Reactor.Analyzers 目标为 netstandard2.0,不可用 FrozenDictionary、net8+ BCL API 或 System.Text.Json 便利功能;分析器不能引用 src/Reactor.Cli,需要 CLI 逻辑时复制并加一致性测试。每个新 REACTOR_* id 必须在 src/Reactor.Analyzers/AnalyzerReleases.Unshipped.md 增加一行,否则构建报 RS2008;还需注意 RS1030/RS1032。分析须用 CommandDebounceAnalyzer.IsReactorNamespace 等守卫限定在 Reactor 代码,匹配基于 context.SemanticModel / GetSymbolInfo,不得基于原始语法文本。mur check 规则由 RuleRegistry.cs 反射发现,增删规则文件即可,不要手改注册表。比较 ModifierTable 门控应比较类型集合而非名称,优先读 ModifierInfo.ControlGate / PoolResetGate;仅在无法取得类型化属性时才按文本匹配,并锚定 SLOT:\sNAME\s[,)],避免裸 Contains(NAME) 误通过。tests/Reactor.Tests/AnalyzerTests/ModifierGateSource.cs 是测试专用参考实现,mur check 规则不能调用,需复制模式并加一致性测试。
工作流:先确认真实 src/ 中目标错误代码确实会出错,若规则已过时则执行移除(删规则文件、测试、AnalyzerReleases 行与文档条目)。实现前先做误报风险 spike,用真实负例与正例验证候选匹配,误报比无规则更糟。实现时在 src/Reactor.Analyzers/ 按最接近的同类分析器编写;若镜像 CLI 检查逻辑,需在两处实现并加一致性测试;补 AnalyzerReleases.Unshipped.md 行。构建与测试命令:dotnet build src/Reactor.Analyzers/Reactor.Analyzers.csproj -c Debug;dotnet test tests/Reactor.Tests --filter-class "AnalyzerTests" -p:Platform=x64 -p:SkipSignaturesGen=true;若改动 CLI 镜像,运行 dotnet test tests/Reactor.Tests --filter-class "CheckCommandTests" -p:Platform=x64 -p:SkipSignaturesGen=true。SkipSignaturesGen 避免 CS2012 构建竞争,Platform=x64 避免 WinUI 架构失败;若涉及 RulePerformanceTests/CombinedStub,用 --filter-class "RulePerformanceTests" 显式运行。文档为生成式:编辑 docs/pipeline/templates/analyzer-architecture.md.dt 等模板,而非 docs/guide/*.md,可用 dotnet run --project tools/Reactor.DocPipeline -- compile 编译受影响主题。规则集变化时更新 plugins/reactor/skills/reactor-build-and-check/SKILL.md。最后在 stdout 报告新增/移除的 REACTOR* id、误报 spike 结果、涉及文件与通过的测试命令。