lsp extension
将老版 DataStudio 中的编辑器(基于 Monaco)功能迁移至 VSCodeLSPExtension 中,包含语 法高亮、代码提示、代码格式化、代码跳转、代码补全等功能。
lsp 是什么?
全称是 language server protocol,是一种通信协议,用于 IDE 与后端语言服务的通信。IDE 通过 lsp 与后端语言服务进行通信,获取语言服务的能力,比如代码补全、代码提示、代码诊断等。
为什么有 lsp 这一层
每一种编辑器如果都需要语言对自己实现一个插件服务,这是重复劳动。 lsp 本质是一种约定的协议,只要后端服务按照协议的格式提供数据,同样遵照协议的 IDE 客户端就可以直接获取到所需的数据。
VS Code extension 与 VS Code 的通信机制?
如何与 lsp 后端做通信?
lsp 后端的文本如何与前端的文本保持一致,代码推荐的准确性。
代码提示怎么做?
- 语法文件、词法文件是在普通扩展中配置的,通过 languages 这个 contribution
- 其他 lsp 功能:
- 代码提示
- codelens
- codeAction
- 代码诊断
功能模块
LSP 服务端代码,提供代码补全、错误诊断、代码提示等常见语言功能的示例
https://cloud.tencent.com/developer/article/1916417
Lsp 的能力
智能编辑器模块
手写配置文件需要编辑器支持???
- 代码提示
- 代码推荐
- 代码诊断
- 代码优化
代码诊断
代码缺陷一直是开发者很头痛的存在,而引起缺陷的原因也是多种多样,如果能够在编写阶段即可发现代码缺陷,能够节省大量的人力物力,而代码诊断正是为此而生。借助于引擎侧的能力,和众多语法规则,以及代码审查的相关信息,我们总结出了大量的缺陷类型以及对应的缺陷代码,借助智能化算法进行训练之后,已经基本具备了自动缺陷检测的能力。训练模型可以参考监督模型,常用的是支持向量机(Support Vector Machine, SVM)。
代码推荐
LSP 难点
1. 为什么封装了 Websocket?
2. 心跳策略
2. 掉线重连?
- 对于 Monaco 来说,比较好做断线重连,可以直接监听 window 上的 online 事件。
- 但是对于 vscode 扩展来说,无法直接监听到 online 事件(因为插件的没有权限获取 dom 的),通过心跳的方式,来做短线重连的操作。
类 Copilot 的功能的实现
代码推荐的要点
- 推荐的代码通过什么接口实现?
- 推荐结果的选择交互
- inline
- 选择器
- 顺序
- Copilot 的缓存学习?