
Serena 在大型 TypeScript 项目中 find_referencing_symbols 结果不完整怎么调优索引超时【免费下载链接】serenaA powerful MCP toolkit for coding, providing semantic retrieval and editing capabilities - the IDE for your agent项目地址: https://gitcode.com/GitHub_Trending/ser/serena在大型 TypeScript 项目中使用 Serena 时find_referencing_symbols或request_references返回的跨文件引用经常不完整——尤其是项目刚加载后不久的查询。这不是工具失效而是 tsserver 的项目索引还没有完成Serena 等待 tsserver 的$/progress索引信号时受两个超时参数约束超时后它会记录一条警告并照常继续执行查询于是拿到的是部分索引下的结果。本文说明如何根据日志判断是哪个超时先被触发并在 配置文档 的ls_specific_settings机制下调大对应参数让引用查询拿到完整结果。前提条件项目通过typescript语言键使用 Serena 默认的typescript-language-servermanaged install且你已有权限编辑 Serena 的全局配置文件。先理解两个超时的作用位置Serena 在两个时机会等待 TypeScript 项目索引启动时以及第一次跨文件引用查询之前。等待过程分两段配置文档 TypeScript 一节的说明参数默认值作用indexing_start_grace5.0秒等 tsserver开始上报$/progress的窗口。tsserver 必须先解析项目图才能发出第一个 progress token大型项目解析时间会超过这个默认值超过后 Serena 会认为不需要索引可能返回不完整的跨文件引用。文档明确提示如果find_referencing_symbols/request_references在加载项目后不久返回不完整结果应增大此项。只调大indexing_timeout对此无效因为这个 grace 窗口先耗尽。indexing_timeout30.0秒索引已经开始后等 tsserver$/progress项目索引信号drain结束的超时适用于启动时和第一次跨文件引用查询之前两处。索引不在此窗口内完成Serena 记录警告后继续执行。文档建议非常大型的项目调大此项。server_ready_timeout10.0秒初始化后等待 server-ready 信号的超时超时同样只记录消息并继续。关键判断点症状是加载后立刻查引用结果缺优先怀疑indexing_start_grace先被耗尽grace 到期时 progress 还没开始Serena 直接按无索引放行症状是查询前索引开始了但没等完则怀疑indexing_timeout。两者可以一起调大。修改全局配置全局配置文件serena_config.yml在首次运行 Serena 时自动创建位置为 Linux/macOS/Git-Bash 下的~/.serena/serena_config.ymlWindows 为%USERPROFILE%\.serena\serena_config.yml。可以用文本编辑器直接打开或在 Serena 运行时通过 Dashboard 的配置按钮打开或执行serena config edit在serena_config.yml中增加或修改ls_specific_settings.typescript段。以下数值为文档给出的默认值替换为你项目实测需要的值ls_specific_settings: typescript: indexing_start_grace: 30.0 # 等 tsserver 开始上报 $/progress 的窗口秒 indexing_timeout: 120.0 # 索引开始后等其完成的窗口秒两个参数各自独立生效indexing_start_grace决定 progress 何时必须开始indexing_timeout决定开始后最长等多久。示例数值只是文档默认值的对照写法具体取值由你的项目规模决定文档没有给出推荐值。如果只想对某个项目生效而不影响其他项目可以在该项目的project.yml或project.local.yml中使用相同的ls_specific_settings键。注意文档说明了两点项目级设置按语言整体替换全局设置顶层合并非深度合并且项目级设置仅对trusted projects在全局配置中声明生效。验证调优是否生效验证依据是 Serena 自己的日志日志可通过运行中 Serena 的 DashboardLogs 标签页查看也持久化在~/.serena/logsWindows 为%USERPROFILE%\.serena\logs日志级别在全局配置中调整见 日志文档。按以下日志行判断日志措辞来自 TypeScript 语言服务器实现启动阶段出现Waiting for TypeScript project indexing to complete (if async)...随后是TypeScript project indexing complete启动时索引在窗口内完成无需处理。随后是TypeScript project indexing did not complete within Ns; proceeding anyway (complete..., active_progress_tokens...)启动索引超时N 即当前生效的indexing_timeout括号内是索引状态诊断摘要可据此确认哪些 progress token 仍在进行。首次跨文件引用查询前出现TypeScript cross-file indexing complete查询在索引完成后执行find_referencing_symbols结果应为完整集合。若出现TypeScript cross-file indexing did not complete within Ns; proceeding (...)该窗口内索引未结束查询在部分索引上执行结果可能不完整。日志中TypeScript LSP progress [token]: started - .../ended - ...行展示具体索引任务如 Initializing JS/TS language features...的开始与结束可用于确认索引确实在跑、而非根本没开始。判断方法如果调参前看到的是cross-file indexing ... proceeding警告调参后同一查询路径改为cross-file indexing complete且同一符号的引用结果条数恢复到与项目实际一致说明窗口设置足够。若调大后仍然出现超时警告说明项目索引时间超出了你设置的窗口需要继续加大对应参数。限制与边界超时后 Serena 的策略是记录并继续不会拒绝服务这意味着调参不足的代价就是回到结果不完整的老状态日志警告是唯一的显式信号查询结果本身不携带部分结果标记。indexing_timeout对progress 根本没开始的情况无效——那种情况由indexing_start_grace先行判定文档特别强调了这一点。这些设置只适用于typescript语言键的默认typescript-language-server路径。若你的项目走typescript_vtsvtsls或svelte语言键其超时语义不同Svelte 的伴生 TS 服务器在超时时是启动失败而不是带病继续应参考 配置文档 对应小节本文不适用于那些路径。indexing_start_grace与indexing_timeout的等待在启动时和首次跨文件查询前各发生一次项目加载完成后索引已 drain后续引用查询不再重复等待。【免费下载链接】serenaA powerful MCP toolkit for coding, providing semantic retrieval and editing capabilities - the IDE for your agent项目地址: https://gitcode.com/GitHub_Trending/ser/serena创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考