You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Lua中同步调用函数?typescript.nvim连续执行异常求助

解决typescript.nvim连续操作执行不一致的问题

问题根源

你遇到的问题核心在于:这些TypeScript操作(添加缺失导入、移除未使用项等)依赖TS Language Server(tsserver)的文档解析与修改反馈,直接连续调用同步方法时,前一个操作触发的文档变更可能还没被tsserver完全处理,后续操作就基于旧的文档状态执行,导致部分操作未生效。

解决方案

改用同步串行执行每个LS命令,确保每个操作完成后再执行下一个,同时强制更新本地文档状态:

local ts = require("typescript")
vim.api.nvim_create_autocmd("BufWritePre", {
    group = augroupTS,
    buffer = bufnr,
    callback = function()
        -- 获取当前buffer对应的tsserver客户端实例
        local client = vim.lsp.get_active_clients({ name = "tsserver", bufnr = bufnr })[1]
        if not client then return end

        -- 按业务顺序定义要执行的TypeServer命令
        local ts_commands = {
            "typescript.addMissingImports",
            "typescript.removeUnusedImports",
            "typescript.fixAll",
            "typescript.organizeImports",
        }

        for _, cmd in ipairs(ts_commands) do
            -- 同步发送请求,等待tsserver处理完成(超时1000ms)
            client.request_sync(cmd, { 
                textDocument = vim.lsp.util.make_text_document_params(bufnr) 
            }, 1000, bufnr)
            -- 强制更新本地文档,确保后续操作基于最新内容
            vim.cmd("checktime")
        end
    end,
})

额外优化建议

  • 确保你的typescript.nvim和tsserver均为最新版本,旧版本可能存在异步处理逻辑的bug。
  • 如果仍有偶发失效问题,可在每个命令后添加短暂延迟,给tsserver足够的解析时间:
    client.request_sync(...)
    vim.wait(50) -- 等待50ms
    vim.cmd("checktime")
    

内容的提问来源于stack exchange,提问作者zer09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:42:55