vscode 语言客户端扩展 - 如何从服务器向客户端发送消息?

2023-11-22

我一直在开发一个 vscode 扩展,它由使用语言服务器协议的客户端和服务器组成。

目前,我正在尝试做以下事情:当服务器检测到某种条件时,他请求客户端将一定数量的文件加载到工作区中。

我在做这件事时遇到了严重的问题。由于语言服务器协议没有执行此操作的特定请求,因此我考虑从服务器向客户端发送消息,一旦客户端检测到此消息,他将继续执行此命令。

问题是,我也不知道该怎么做。谁能帮帮我吗?


只要您确定该名称不会与现有的 LSP 方法冲突,您就可以定义自己的任意方法。例如,在官方 lsp 样本,你可以这样做:

(在......的最后client/src/extension.ts)

let client = new LanguageClient('lspSample', 'Language Server Example', serverOptions, clientOptions);
client.onReady().then(() => {
    client.onNotification("custom/loadFiles", (files: Array<String>) => {
        console.log("loading files " + files);
    });
});
context.subscriptions.push(client.start());

(in the documents.onDidChangeContent的听众server/src/server.ts)

var files = ["path/to/file/a.txt", "path/to/file/b.txt"];
connection.sendNotification("custom/loadFiles", [files]);

每当您更改 a 的内容时,都会将以下内容输出到开发控制台.txt文件(因为示例使用plaintext作为其文档选择器):

加载文件path/to/file/a.txt,path/to/file/b.txt

当涉及到自定义方法的名称、参数或调用它们时,您几乎具有完全的灵活性。语言服务器出于各种目的(高级功能、内部调试/开发功能等)使用此类不属于协议一部分的自定义方法是很常见的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vscode 语言客户端扩展 - 如何从服务器向客户端发送消息? 的相关文章

  • OpenAI Gymnasium,有没有算法支持的库?

    OpenAI 发布了一个名为 Gymnasium 的新库 它应该取代 Gym 库 有许多库都实现了支持健身房环境的强化学习算法 但是 Gymnasium 的界面略有变化 有没有支持 Gymnasium 的算法库 我尝试了 CleanRL K
  • 将 cron 作业配置为在 Jenkins 上每 15 分钟运行一次

    如何在 Jenkins 上每 15 分钟运行一次 cron 作业 这是我尝试过的 在 Jenkins 上 我使用以下 cron 语法设置了每 15 分钟运行一次的作业 14 但该作业每小时执行一次 而不是 15 分钟 我收到有关 cron
  • Thymeleaf Spring 安全集成 sec:授权不起作用

    我正在使用带有 Spring security 的 Thymeleaf 模板引擎 我还使用 Thymeleaf Spring Security 集成模块来使用 sec authorize 功能 但由于某种原因它不起作用 我没有收到任何错误
  • 在 pip 中为 Flask 应用程序构建 docker 映像失败

    from alpine latest RUN apk add no cache python3 dev pip3 install upgrade pip WORKDIR backend COPY backend RUN pip no cac
  • 类型铸造自我

    以下自我转换对 ClassA 有何作用 这种种姓可以让你进入ClassA吗 A h类 interface ClassA NSObject NSUInteger someNumber ClassB classB property nonato
  • 你遇到过哪些 git 陷阱?

    我遇到的最糟糕的情况是 git 子模块 我在 github 上有一个项目的子模块 该项目无人维护 我想提交补丁 但无法提交 所以我分叉了 现在子模块指向原始库 而我需要它指向 fork 因此 我删除了旧的子模块 并将其替换为同一提交中新项目
  • MsBuild 在 Visual Studio Online 上找不到恢复的 NuGet 包

    我尝试构建一个存储在 Visual Studio Online 上的外部 GIT 存储库中的解决方案 它有以下步骤 1 Git 恢复 有效 2 NuGet 恢复 有效 3 构建 不起作用 查看日志时我的第一个猜测是 MsBuild 没有查找
  • 将文件附加到 PHPMailer

    我目前正在开发一个项目 该项目将文件作为 blob 存储在数据库中 我需要将文件附加到电子邮件并通过 PHPMailer 发送出去 我熟悉 mail gt addAttachment 但是 这个函数似乎只接受文件路径 而我没有 我想知道是否
  • Gitflow错误无法初始化

    我已经将 gitflow 安装在我的 github 项目所在的目录中 但是 当我尝试使用命令 启动时git flow init 我收到以下错误消息 git flow init C cygwin64 usr local bin gitflow
  • 使用Python的timeit获取“全局名称'foo'未定义”

    我想知道执行一条Python语句需要多少时间 所以我上网查了一下 发现标准库提供了一个名为timeit http docs python org library timeit html旨在做到这一点 import timeit def fo
  • 从哪里开始阅读 SQLite 源代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想了解sqlite是如何实现的 并且 想阅读源代码 我已经下载了源代码 我应该开始查看代码的哪一部分 SQLite文档页 http
  • 重构后如何保留 terraform 资源以使用 for_each?

    目前我正在对我们的基础设施进行小型重构 我的项目的当前版本类似于以下内容 我正在尝试使用 for each 来重用变量 resource google cloud scheduler job job name Create All Doss
  • 安装 RVM 时出现问题

    我已按照 rvm 网站上的说明执行了命令 但似乎不起作用 从 git 存储库获取代码运行顺利 但是当我尝试使用时 rvm notes Error usr local bin rvm line 73 home cody rvm scripts
  • 获取长度为 n 的所有(n-选择-k)组合

    我怎样才能获得长度的所有组合 按顺序 n从数字列表中 例如 给定列表 1 2 3 4 并设置n 3 我怎样才能得到这些结果 1 2 3 1 2 4 1 3 4 2 3 4 For combinations of all possible l
  • 不确定如何在使用故事板时正确子类化 UIApplication

    我想在 X 次用户不活动 没有触发触摸事件 后返回故事板的初始视图控制器 经过一些研究 我发现检测不活动的最常见方法是触发 NSTimer 并在事件触发时重置间隔 为了检测触发的事件 我们在 UIApplication 的子类中重写 UIA
  • 使用 Javascript 删除字符串的最后一个字符

    我有一个DIV与一些字符 如何在每次单击时删除文本中的最后一个字符DIV itself 删除第一个字符 div on click function this text function index text return text repl
  • 构建 OpenCV 时出错 :: MonitorFromRect 未在此范围内声明

    我试图建立OpenCV version 2 4 8与它一起使用CodeBlocks and MinGw 我按照以下指示进行操作here http kevinhughes ca tutorials opencv install on wind
  • AddressAccessDeniedException :无需 netsh 即可解决它?

    我遇到了异常AddressAccessDeniedException因为我的processus没有注册URL的权限 我首先以管理员身份运行我的程序 好的 它成功了 但我现在想要分发我的应用程序 并且我希望每个用户都能够运行它 而不必成为管理
  • 将笔记本生成的 HTML 片段转换为 LaTeX 和 PDF

    在我的笔记本里有时会有 from IPython display import display HTML display HTML h3 The s is important h3 question of the day 但当我后来将笔记本
  • 如何更改 UILabel/UIFont 的字母间距?

    我已经搜索了很多 但找不到答案 我有一个普通的 UILabel 定义如下 UILabel totalColors UILabel alloc initWithFrame CGRectMake 5 7 120 69 autorelease t

随机推荐

  • Google Keep 如何在保存录音的同时进行语音识别?

    Android 的 SpeechRecognizer 显然不允许将您正在进行语音识别的输入记录到音频文件中 也就是说 要么使用 MediaRecorder 或 AudioRecord 录制语音 要么使用 SpeechRecognizer 进
  • JavaScript 中所有可打印字符的正则表达式

    寻找验证所有可打印字符的正则表达式 正则表达式仅需要在 JavaScript 中使用 我已经经历过this帖子 但主要讨论 net Java 和 C 但不讨论 JavaScript 您必须只允许这些可打印字符 a z A Z 0 9 以及三
  • 导入错误:无法在新安装上导入名称“opentype”

    我刚刚创建了一个 Google Cloud 计算引擎 安装了带有 pip 和 pip3 的 google cloud 软件包 并且在使用 python3 启动脚本时遇到以下错误 from google cloud import bigque
  • 无法加载程序集,HRESULT 异常:0x80131040

    例外 无法加载文件或程序集 WPFVisifire Charts Version 4 1 0 0 Culture neutral PublicKeyToken 99d724542e4db593 或其依赖项之一 找到的程序集的清单定义与程序集
  • 正则表达式:如何只允许大于零的整数

    我尝试了以下方法 只允许在文本框中输入整数 这很好用 但它允许其中有零 我还可以添加其他内容来防止添加零吗 d 这将允许 10 但不允许 01 并且只允许由数字组成的数字 即没有句点或减号 但也没有加号 科学记数法等 1 9 0 9
  • 如何强制 MVC 验证 IValidatableObject

    看起来 当 MVC 验证模型时 它首先运行 DataAnnotation 属性 如必需的或范围 如果其中任何一个失败 它会跳过在我的 IValidatableObject 模型上运行 Validate 方法 即使其他验证失败 是否有办法让
  • 在 SwiftUI 中将视图动画化以向上滑动并点击隐藏

    我创建了一个横幅修改器 从顶部显示横幅 这动画效果很好 但是 当我点击以关闭它时 它根本没有动画 只是隐藏 即使点击手势动作已withAnimation包裹它 struct BannerModifier ViewModifier Bindi
  • 无法从 QQmlPropertyMap 子类中的 QML 调用槽或 Q_INVOKABLE

    我正在尝试试驾QQmlPropertyMap班级 如果我可以对它进行子类化 它似乎可以很好地满足我的需求 文档here甚至给出了一些关于如何对其进行子类化的基本说明 所述文档还表明该类派生自QObject 就其价值而言 我在 Qt 5 0
  • 动态添加新元素后,jQuery 选择器不会更新

    我的选择器是 section attendance input last 但是 我将另一个输入附加到section attendance 我希望选择器现在选择该元素 因为它应该如此 因为 last 然而 由于某种原因 它没有 我不太确定为什
  • C++函数有默认返回值吗? [复制]

    这个问题在这里已经有答案了 我很惊讶包含以下代码行的文件已成功编译并且链接器生成可执行文件 我认为所有功能 除了main 必须有一个有效的return语句 除非返回类型是void int foo double bar int main 我缺
  • 从 CMD 返回错误代码到 Powershell

    我正在编写 Mssql 安装脚本 我想获得静默 mssql 安装的结果 在我的 PowerShell 脚本中 我运行以下命令 result start cmd c D SQL2008R2 SQL2008R2 setup exe CONFIG
  • 将 blob 文件发送到服务器

    我正在尝试将录音发送到服务器并将其另存为 wav 我在前端使用 Angular 在服务器上使用 net core 我能够录制 然后制作一个 音频 wav 类型的斑点 为了将其发送到服务器 我将其转换为数组缓冲区 然后将数组缓冲区转换为 Ba
  • 将音频与视频结合(不使用 ffmpeg)- Java

    我正在构建一个小程序来捕获屏幕和麦克风输入 音频 我可以单独录制这些文件 但找不到将这些文件组合起来制作新的音频视频的方法 视频文件位于 mov格式和音频是 wav格式 它们的长度完全相同 有什么办法可以合并这些文件吗 我尝试过 Java
  • Xcode 4.2 首选项“支持无线连接设备”有什么作用?

    在 Xcode 4 2 中 常规 选项卡下有一个名为 iOS 设备发现 的新首选项 其中包含 支持无线连接设备 复选框选项 这个选项有什么作用 检查后 我们如何使用这个新功能 将您的设备插入机器 转到 iTunes gt 设备 gt 摘要页
  • 将 iter() 替换为 par_iter():无法在“Fn”闭包中捕获的外部变量中可变地借用数据

    我本来希望更换一个iter with Rayon s par iter 在这样一个相当简单的情况下 但我没有这样做 之前的代码 indexes to increment iter for each x self some data x as
  • Angular-ui 的工具提示在 ng-grid 中无法正确显示

    我一直在寻找在 ng grid 上显示工具提示的解决方案 但没有成功 当我使用 ng grid 上的 cellTemplate 自定义单元格以包含工具提示时 我遇到了各种问题 工具提示要么不显示 要么表现奇怪 如 plunker 中所示 h
  • Python flake8 py 错误地报告 W391(文件末尾没有换行符)

    W391 规定文件末尾应该有一个 且只有一个 空行 然而 当文件末尾至少有一个换行符时 flake8 会报告错误 cat tmp test py def hello print hello hello hexdump C tmp test
  • 如何设置 PayPal 沙盒“卖家”帐户、“买家”帐户和应用程序教程

    我正在尝试建立一个使用 PayPal 的网站 不幸的是 PayPal 开发者网站 概念发生了很大变化 因此我发现的所有教程似乎都没用 例如这个 非常好 YouTube 教程很明显正在使用不存在的页面和功能 因此 请尝试仅通过最新信息 教程来
  • 使用 httpclient 和 asynctask 取消文件下载

    在我的应用程序中 我需要从 url 位置下载文件 我想在对话框中 或可选地在通知区域中 显示下载进度 我遇到过一些关于这个主题的好资源 比如http progrnotes blogspot com 2010 09 c android htm
  • vscode 语言客户端扩展 - 如何从服务器向客户端发送消息?

    我一直在开发一个 vscode 扩展 它由使用语言服务器协议的客户端和服务器组成 目前 我正在尝试做以下事情 当服务器检测到某种条件时 他请求客户端将一定数量的文件加载到工作区中 我在做这件事时遇到了严重的问题 由于语言服务器协议没有执行此