php强类型 vscode,VSCode 扩展入门,后缀代码补全的实现
我们项目组使用了 protobuf 作为传输协议,其好处不用多说。可是由于 go 默认数字类型是 int,且 go 属于强类型语言,切换类型就成了家常便饭。
一般来说,切换类型的步骤不外乎:
选中数字部分。
加括号。
输入新类型。
时间长了,不免觉得有些复杂。 Goland 是支持自定义后缀代码补全的,只需要合理设置即可。
而 vscode + gopls 没有对后缀代码补全的支持,需要通过扩展支持。 已有的插件 https://github.com/yokoe/vscode-postfix-go 是一个接近的选择,支持 len 这类表达。可惜没有提供 int 相关的支持。
在 issue 提出建议没有收到回应后,我决定在他的基础进行补充,毕竟两种表达相差不多。
Fork
首先将原项目 fork 出来,对作者信息以及许可证进行修改。
npm
vscode 扩展是通过 ts/js 实现的,自然少不了 npm 的使用。在 sudo pacman -S npm 安装好 npm 后,在项目目录使用 sudo npm install 进行安装。虽然不熟悉 npm 但我想这一步和 go install 应该相差无几。
~/code/vscode-postfix-go (master) [05:14:53]
p1gd0g$sudo npm install
> vscode-postfix-go-int@0.0.1 postinstall
> node ./node_modules/vscode/bin/install
Detected VS Code engine version: ^1.12.0
Found minimal version that qualifies engine range: 1.12.0
Fetching vscode.d.ts from: https://raw.githubusercontent.com/Microsoft/vscode/72672be0b7d3eef0784077b880615f91b7ec85aa/src/vs/vscode.d.ts
vscode.d.ts successfully installed!
Code
在项目中很容易就可以找到对应后缀代码补全的代码。
比如 len 的实现:
export class LenTemplate extends BaseExpressionTemplate {
buildCompletionItem (code: string, position: vsc.Position) {
const dotIdx = code.lastIndexOf('.', position.character)
const codeBeforeDot = code.substr(0, dotIdx)
let lastComponent = getLastComponent(codeBeforeDot)
let builder = CompletionItemBuilder
.create('len', lastComponent)
.description(`len(expr)`)
builder.insertText('len(' + lastComponent + ')')
builder.deleteTextBeforeCursor(position, lastComponent.length + 1)
return builder.build()
}
}
和 type 的实现:
export class TypeTemplate extends BaseExpressionTemplate {
constructor (private keyword: string) {
super()
}
buildCompletionItem (code: string, position: vsc.Position) {
return CompletionItemBuilder
.create(this.keyword, code)
.description(`type expr ${this.keyword}`)
.replace(`type {{expr}} ${this.keyword} {\n${getIndentCharacters()}\${0}\n}`, position, true)
.build()
}
}
我们要做的就是将两者结合起来。我想即使是没有接触 js/ts 的同学,只要有一定的基础,不难完成这一目标。 具体的思路不做介绍,结果如下:
export class IntTemplate extends BaseExpressionTemplate {
constructor(private keyword: string) {
super()
}
buildCompletionItem(code: string, position: vsc.Position) {
const dotIdx = code.lastIndexOf('.', position.character)
const codeBeforeDot = code.substr(0, dotIdx)
let lastComponent = getLastComponent(codeBeforeDot)
let builder = CompletionItemBuilder
.create(this.keyword, lastComponent)
.description(this.keyword + '(expr)')
builder.insertText(this.keyword + '(' + lastComponent + ')')
builder.deleteTextBeforeCursor(position, lastComponent.length + 1)
return builder.build()
}
}
Debug
通过 vscode 自带的调试,就可以看到我们想要的结果。
Package & Publish
发布成功后即可在 vscode 扩展上商店中看到我们自己的扩展。
以上内容不限于 go 语言。
php强类型 vscode,VSCode 扩展入门,后缀代码补全的实现相关推荐
- vscode插件快餐教程(5) - 代码补全
vscode插件快餐教程(5) - 代码补全 上节我们介绍了lsp的基本框架和协议的三次握手. 下面我们先学习一个最简单的功能协议:给vscode发送一条通知. LSP窗口消息 在LSP协议中,跟窗口 ...
- scala入门之代码补全
为什么80%的码农都做不了架构师?>>> 在scala的shell命令行中,我们可以使用像Linux那样的代码补全功能.Linux中是使用Tab键补全,scala的shell命 ...
- c语言 vscode代码自动补全_借助C/C++ Extension实现VSCode C++代码补全
在VSCode C/C++ IntelliSense领域,目前有两位实力相当的选手,它们分别是基于微软闭源技术的C/C++ Extension和开源方案clangd.根据我目前体验,它俩的特性可以总结 ...
- 【Unity开发】VSCode 代码补全缺失问题的各种修复方法
[Unity开发]VSCode 代码补全缺失问题的各种修复方法 尝试:VSC的各种配置 尝试:更改配置语言 尝试:更新 VSCode Editor 在 Unity 内 尝试:.Net 安装 没错!我被 ...
- html没有代码补全 vscode_借助clangd实现VSCode C++代码补全
YCM推荐选项 由于C++语言的复杂性,根据语义对C++进行代码补全并非易事.最近浏览YouCompleteMe项目,发现它已经开始向用户推荐使用clangd作为C++ Completer.与libc ...
- Vscode配置Vue插件Vetur自动补全和Eslint校验,正在保存“index.vue”: 从 “‘ESLint‘, ‘Vetur‘“ (configure)中获取代码操作
出现这个问题,主要原因是vetur插件自己升级了,我真服了... 问题描述:一直都是这个提示,然后文件保存不了,然后也无法格式化和代码提示 经过一番调教之后,发现通过降级vetur插件搞定了,降级操作 ...
- vscode代码补全一个非常奇怪的问题
一个node项目,代码补全的建议总是显示的非常慢,比如输入一个for,显示补全的建议可能等待需要2-3秒.使用 ctrl+i 快捷键的话就会显示正在加载中...,也需要等2-3秒才能显示出补全建议 比 ...
- unity的vscode代码补全问题
unity的vscode代码补全问题(安装了插件却无法显示unity的要用到名词) vscode中,这里打了tr却无法显示transform,或者直接就找不到这个词 原因 unity是基于c#语言,但 ...
- 图片高亮处理编程_GMT语法高亮-智能提示-代码补全插件
GMT(Generic Mappint Tools)是地学界应用非常广泛的一款绘图兼数据处理的开源软件.其开发团队也是非常活跃,此软件还在不断的发展和更新中,变得越来越强大.目前已经有164个模块,而 ...
最新文章
- TP-GAN 让图像生成再获突破,根据单一侧脸生成正面逼真人脸
- 数据库诞生40年,阿里云AWS用技术推动第三次变革
- Web Essentials之样式表StyleSheets
- 使用sys导出oracle,oracle 让sys用户执行exp导出操作
- github page hexo博客gitee_GitHub+hexo快速搭建个人博客
- Axure图片不显示
- CE修改器基础操作教程
- 透彻解读mysql的可重复读、幻读及实现原理
- 【Python】PDF转图片
- 2022腾讯实习生移动客户端开发一面(IEG)
- 【Json】Json校验工具
- 数据结构 Hash,哈希冲突,哈希聚集,BloomFilter,分布式一致性hash
- miui系统分身测试软件,【MIUI 8评测】手机分身初上手,黑科技值爆表!
- 【报告分享】2021百度快消人群洞察-百度营销研究院(附下载)
- 【计算智能】模糊控制(一)模糊集合及其基本运算
- java中 toast的意思,英语:toast意思
- stm32g4 下载算法_手把手教你制作基于IAR、STM32H7的下载算法
- b374k php webshell
- Pytorch学习(三)Linear层
- 大数据对互联网金融的作用和影响(理财篇)
热门文章
- Java导出Excel和Word
- 密歇根安娜堡大学计算机科学教授,UMich的EECS「密歇根大学安娜堡分校电气工程与计算机科学系」...
- excel跑数计算机卡,电脑使用excel很卡甚至死机怎么样解决
- NLP Stemming与Lemmatization的区别
- Intel IPP密码库 IPPCP 2018——第二部分 对称密码算法开发说明与示例代码
- 计算机等级考试 12月,2020年12月计算机等级考试成绩什么时候公布
- 国内设计师经常逛的5个素材网站
- Android一键清理原理
- html5闪光效果,css特效-一道闪光在图片上划过
- 微信小程序开发13 云开发:云原生一体化应用开发平台