首页 > 其他分享 >vscode-lsp插件开发

vscode-lsp插件开发

时间:2023-06-12 20:34:26浏览次数:58  
标签:插件 语言 vscode Server 开发工具 文档 lsp 服务器 LSP

LSP 是什么

LSP, 全称 Language Server Protocol, 即语言服务器协议, 这是微软创建的一个协议(目前已有 Codenvy, Red Hat 和 Sourcegraph 等公司一起支持它的发展)。定义了在编辑器或 IDE 中与语言服务器之间使用的协议, 该语言服务器提供诸如自动完成, 转到定义, 查找所有引用等语言功能。语言服务器索引格式(LSIF, 其发音类似于" else if")的目标是支持开发工具或 Web UI 中的富代码导航, 而不需要源代码的本地副本。

目前该协议得到了编辑器和语言社区的广泛支持。

LSP 的官方网站: https://microsoft.github.io/language-server-protocol/, GitHub 地址: https://github.com/Microsoft/language-server-protocol。目前最新版本(2020-09-06): 3.15。

LSP 解决了什么问题

为编程语言添加诸如自动完成、转到定义或鼠标悬停出现文档之类的功能需要付出大量的努力。传统上, 这项工作必须为每个开发工具重复进行, 因为每个工具为实现相同的特性提供不同的 api。

语言服务器(Language Server)旨在提供特定语言的智能功能, 并通过支持进程间通讯协议与开发工具进行通信。

语言服务器协议(LSP)背后的思想是为这些服务器和开发工具的通信方式提供标准化协议支持。通过这种方式, 可以在多个开发工具中重用单个 Language Server, 而这些工具反过来可以用最少的工作支持多种语言。

例如, 之前需要为 VSCode 构建 Go 插件、为 Sublime Text 构建 Go 插件、为 Vim 构建 Go 插件、为 Sourcegraph 构建 Go 插件, 很多重复的工作。现在, 对于每种语言, LSP 允许语言社区将精力集中在一个高性能语言服务器上, 这个服务器可以提供代码完成, 悬停文档提示、跳转到定义、查找引用等功能, 而编辑器和客户端社区可以专注于构建一个单一的、高性能的、直观的和惯用的扩展, 这个扩展可以与任何语言服务器通信, 即时提供深入的语言支持。

LSP 是语言提供商和工具供应商的双赢!

LSP 的工作原理

语言服务器(Language Server)作为单独的进程运行, 开发工具在 LSP 基础上通过 JSON-RPC 与服务器通信。下面是一个开发工具和语言服务器在进行编辑时如何通信的例子:

图片来自 LSP 官网, 演示了协议如何在文档引用(uri)和文档位置级别与语言服务器通信。这些数据类型与编程语言无关, 适用于所有编程语言。

用户在开发工具中打开一个文件(称为文档) : 开发工具通知语言服务器文档已打开(textDocument/didOpen)。从现在开始, 关于文档内容的真实信息不再存储在文件系统中, 而是由开发工具保存在内存中。现在必须在开发工具和语言服务器之间同步内容。
用户进行编辑 : 该开发工具通知服务器文档更改(textDocument/didChange), 并由语言服务器更新文档的语言表示形式。在这种情况下, 语言服务器会分析这些信息, 并将检测到的错误和警告通知开发工具(textDocument/publishDiagnostics)。
在打开的文档中, 用户就一个符号(symbol)执行 Go to Definition : 该开发工具发送一个带有两个参数的 “textdocument/Definition” 请求: (1) 文档 URI 和 (2) 发出 “Go to Definition” 请求的文本位置, 发送到服务器。服务器的响应包含文档 URI 和该符号在该文档中的定义位置。
用户关闭文档(文件) : 开发工具发出 “textDocument/didClose” 的通知, 告知语言服务器文档现在不在内存中了。文件系统上的当前内容现在是最新的。

vscode

VS Code Go 扩展 是go官方推断维护的go语言扩展插件,使用gopls提供语言的如自动完成、转到定义或鼠标悬停出现文档功能。

LSP

What is the Language Server Protocol?

Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature.

A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.

The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, a single Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.

LSP is a win for both language providers and tooling vendors!

https://microsoft.github.io/language-server-protocol/

标签:插件,语言,vscode,Server,开发工具,文档,lsp,服务器,LSP
From: https://www.cnblogs.com/jiftle/p/17476039.html

相关文章

  • 登录案例,scoped,ref属性,props其他,混入mixin,插件,饿了么UI
    0解析一下vue项目#1为什么浏览器中访问某个地址,会显示某个页面组件 -根组件:App.vue必须是<template><divid="app"><router-view></router-view></div> </template> -1配置路由 router----》index.j......
  • Linux RDP 会话中无法打开VSCode 解决办法
    githubissue:VSCode"andstill"won'topeninaLinuxxrdpsessionWorkaround-LinuxRDP会话中无法打开VSCode解决办法ThistimearoundIresolvedtheissuebynarrowingthefollowingHackintwosteps:Copythesystemfile'libxcb.so.1.1.0'......
  • 直播系统搭建,vue插件之vue-seamless-scroll 无缝滚动
    直播系统搭建,vue插件之vue-seamless-scroll无缝滚动使用 importvueSeamlessScrollfrom'vue-seamless-scroll' //注册组件 components:{  vueSeamlessScroll}  //template  <vue-seamless-scroll:data="Top10GatewayLog":class-option="optionSingleHeigh......
  • VSCode详细使用教程
    VSCode(VisualStudioCode)是由微软研发的一款免费、开源的跨平台文本(代码)编辑器,算是目前前端开发几乎完美的软件开发工具。1.VSCode下载VSCode下载链接:https://code.visualstudio.com/2.VSCode汉化 3.VSCode常用插件(安装步骤同汉化) 3.1AutoCloseTag(自动闭合HTML/XML标签......
  • 二维码qrcode插件
    一.安装npminstall--saveqrcode二.canvas绘制importQRCodefrom"qrcode";//选择二维码添加的元素constchild=this.$el.querySelector(".child");QRCode.toCanvas(value,options,(error,canvas)=>{if(error){throwerror;}child.app......
  • 揭秘报表新玩法!标配插件不再单调,如何用柱形图插件让你的报表瞬间高大上!
    摘要:本文由葡萄城技术团队于博客园原创并首发。葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言图表作为一款用于可视化数据的工具,可以帮助我们更好的分析和理解数据,并发现数据之间的关系和趋势。下面以柱形图为例介绍如何使用JavaScript在报表中引入图表......
  • [GPT] jquery chosen插件选择的多个元素是逗号分隔的,怎么设置成其它分隔符号 ?
     如果你想要在jQueryChosen插件中使用其它分隔符号,可以通过以下方式实现: 1.设置delimiter选项为一个包含所需分隔符的字符串。$(".chosen-select").chosen({delimiter:";"});在这个例子中,我们将分隔符设置为分号;。 2.在表单提交时,使用JavaScript替换......
  • ubuntu 搭建 cmake + vscode 的 c/c++ 开发环境
    todo列表clang-formatc++整合软件安装略基本的环境搭建最基本的vscode插件只需要安装如下两个插件即可c/c++扩展是为了最基本的代码提示和调试支持cmakelanguagesupport是为了提示CMakeLists.txt脚本有可能安装了cmakelanguagesupport还是没有代码......
  • blender 使用物理骨骼,受物理影响+不影响主观能动性的"物理妥协骨骼" 插件:wiggle bone
    复制需要物理模拟的控制骨,做2层一样的控制骨,在DEF的需要物理模拟的骨骼中加约束,影响:0.5解决wiggle异常抖动还没有解决办法……......
  • Gradle 的安装与配置 + eclipse 里安装 Gradle 插件
    一、什么是Gradle基于ApacheAnt和ApacheMaven概念的项目自动化构建开源工具,基于Groovy这个特定DSL语言来进行声明项目设置,也增加了基于Kotlin语言的kotlin-basedDSL。简介:Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven,Ivy仓库,支持传递性依赖管理,而不需要远......