当前位置: 首页 > news >正文

Visual Studio Code中对打开的脚本格式统一

什么是Language Server Protocol (LSP)?

 Language Server Protocol(语言服务器协议,简称LSP)是微软在2016年提出的一套统一的通讯协议方案。LSP定义了一套编辑器或者IDE语言服务器(Language Server)之间使用的协议,该语言服务器提供自动完成、转到定义、查找所有引用等语言功能。

语言服务器(Language Server):使用在线编辑工具的时候,会有代码提示、代码错误诊断等功能,这个背后实际上有一个对应这个语言的language server进程,这个language server进程实例负责分析你当前打开的代码文件。

市面上的编辑器/IDE,本质上提供给用户的代码编辑(如打开文件,编辑文集,查找引用,打开工作区等)以及编辑器的响应行为(如补全提示、代码诊断等)其实都大同小异,可能在个别功能上实现不一样,但是逃不开上述内容。或者说,上述这些功能都可以抽象为一系列的【行为事件】。

微软提出 LSP 的目的是,之前各个编辑器(VSCode, Vim, Atom, Sublime...)各自为战,编辑器内部实现的特性和协议都不同。每换一个编辑器,就有可能要给该编辑器中支持的每门语言写一个对应的 Language Server,也就是说假设有 n 门语言,m 个编辑器,那全部编辑器适配所有语言的开发成本和复杂度为 n * m。

能不能在中间层做一个抽象,让语言的「静态分析服务」和「编辑器 / IDE」分离开来?这样上述情景下开发成本和复杂度就可以降低为线性的 n + m。

安装VS code的R扩展以提高R编程体验:

这个VS Code扩展提供了R编程语言的支持,包括扩展语法突出显示、基于代码分析的R语言服务、与R终端交互、查看数据、绘图、工作区变量、帮助页面、管理包以及使用RMarkdown文档等功能。

  1. 在你的电脑上安装R(>=3.4.0)。
  2. 在R中安装languageserver扩展包:install.packages("languageserver")
  3. 在VS code中安装R扩展:在VS Code中搜索R,安装R扩展;
  4. 创建一个R文件,并且开始编程;

推荐下面的软件或者扩展来提高在VS Code中使用R的体验:

  • radian: 一个R console,纠正了官方R端的诸多限制,支持语法高亮、自动补全等诸多功能。
  • VSCode-R-Debugger: 一个VS Code扩展,来提高R调试功能;
  • httpgd:一个R包,提供通过HTTP和WebSockets异步提供SVG图形的图形设备。

功能1:设置统一的代码格式(format)

 效果图:

 可以从效果图中看到,m <- lm(y ~ x, weights = w)中,由之前的y~x增加了空格,y空格~空格x,weight空格=空格w.

为什么要设置格式?我认为有以下个方面的原因:

  1. 代码美观,可读性强;
  2. 为了之后,代码比较做准备,因为代码格式统一的时候,代码做比较才会有意义。【代码比较可以在VScode中对选中的两个代码进行比较。】

功能2:符号高亮

当鼠标的光标在一个符号内部的时候,代码文件(例如下面的vscode-R-test1.R)中的所有这个符号都会被高亮。下面这个例子中,光标放在了符号var2内部,我们可以看到这个文件中的所有var2都高亮了,即都有一个阴影框将这个var2框住了。

 功能3:代码框扩展选择(Document selection)

在一个代码段中,如果选中某几行代码,然后同时按住Shift+Alt+rightarrow后,会发现选中了这个代码段,这个很方便,尤其是当我们想要选中的代码段非常长的情况。

首先选中几行代码:

然后按住Shift+Alt+rightarrow,我们就可以选中diagnostics_task这个函数的代码块:

 功能4:代码段(code section)

R语言服务器通知VSCode代码段或代码块,通过outline或者panel header进行导航:

 代码折叠:

 功能5:调用层次结构(Call hierarchy)

选中自定义函数的函数名,右键出现下拉菜单,从中选择show call hierarchy,进而在VS code页面的左侧出现 选中的自定义函数的函数名,它下面现实了 调用这个函数的函数名。

 

效果图如下:

 

参考:

理解 Language Server Protocol 的工作原理 - 掘金 (juejin.cn)

GitHub - REditorSupport/languageserver: An implementation of the Language Server Protocol for R

R Language Service · REditorSupport/vscode-R Wiki · GitHub 

 

http://www.lryc.cn/news/113454.html

相关文章:

  • 补充JDK源码-IDEA集成工具
  • Git Submodule 更新子库失败 fatal: Unable to fetch in submodule path
  • Springboot切面打印日志
  • ubuntu上回环设备/dev/loop0占用100%清理
  • List list=new ArrayList()抛出的ArrayIndexOutOfBoundsException异常
  • 桶排序算法
  • P8604 [蓝桥杯 2013 国 C] 危险系数
  • Excel·VBA表格横向、纵向相互转换
  • Leetcode-每日一题【剑指 Offer 06. 从尾到头打印链表】
  • LeetCode--HOT100题(22)
  • 产品体系架构202308版
  • Linux systemctl 简单介绍与使用
  • 恺英网络宣布:与华为鸿蒙系统展开合作,将开发多款手游
  • Vue CORS
  • Godot 4 源码分析 - 文件读入编码处理
  • Linux 中使用 verdaccio 搭建私有npm 服务器
  • C++入门之stl六大组件--stack和queue源码深度剖析及模拟实现
  • MyCat配置文件schema.xml讲解
  • Grafana集成prometheus(2.Grafana安装)
  • 代码随想录算法训练营第五十七天| 647. 回文子串 516.最长回文子序列
  • django 优化方式
  • IDEA中怎么使用git下载项目到本地,通过URL克隆项目(giteegithub)
  • 09. Docker Compose
  • 如何在shell脚本将node_modules里的文件复制一份到public文件里
  • 监控Redis的关键指标
  • Openlayers和leaflet如何选用?
  • 跟我学C++中级篇——三五法则
  • aardio:用 WebView 模仿 mdict 界面
  • linq中的操作符
  • 数据结构【哈夫曼树】