Goland(Jetbrains Idea平台)插件开发教程(二)
前言
在上一篇教程中,并没有提到太多goland的特性,只是配置了goland作为开发环境并做了一点简单的介绍,大多数还是Idea平台通用的东西。我在自己开发的插件中就做了一些live template,并集成到了插件中。下面这篇博文就来介绍一下编写live template、如何集成live template。
编写live template
俗话说万事开头难,第一步我们最好看一下官方的live template是怎么写的。
查看官方live template
在goland中自带了两大类跟golang相关的宏,一类是语法相关的,另一类就是结构体的tag了。
golang没有java注解,但是有struct tag。我们从官方的json tag入手看一下,只要我们在结构体Field后输入json就会出现这样的提示,且回车后会自动帮我们填好tag里的内容。
回车后
我们来看一下这是怎么配置的。Abbreviation就是触发的缩写了,后面的Description也可以望文生义,主要的内容就是Template是如何书写的了。
$符包裹的就是一些变量了,$END$是光标最后会停在的地方。打开Edit variables,我们可以看到其对FIELD_NAME这个变量配置了Expression,望文生义也就是将fileName转为驼峰。Expression的内容等到讲macro的时候再来看,现在只是先窥探一番。
注意在设置的左下角还有个Applicable,这里可以设置生效的范围
仿写
比如要添加xorm的tag我们就可以这样写了
效果如下
光标也确实停在END的地方
导出并在插件中集成
导出
打开File菜单,找到Manage IDE Settings => Export Settings
选中Live Templates(schemes)
这样就可以在对应的路径下找到导出的文件了。
打开可以看到如下内容
1 | <templateSet group="Go Struct Tags"> |
由于xml的转义实在有点恶心,所以通过这种导出的方式会比较舒服。
集成
将文件复制到resource/livetemplates目录下
创建CustomTemplateProvider.java,切记路径无需写resoure目录,也无需添加后缀名
1 | public class CustomTemplateProvider implements DefaultLiveTemplatesProvider { |
在plugin.xml添加如下配置,我这是添加到原有的Go Struct Tag下,所以liveTemplateContext implementation填的是下面的配置。
1 | <extensions defaultExtensionNs="com.intellij"> |
在运行前把之前添加的tag删掉,运行插件后应该也能看到我们自定义的live template了。
如果我们不想添加到这个group下,我们就要自定义TemplateContextType了,下面写一个类继承TemplateContextType
1 | public class CustomTemplateContextType extends TemplateContextType { |
并将livetemplate xml 的templateSet group修改为CustomTemplate,以及plugin.xml liveTemplateContext implementation修改为上面类的路径。
这样就会出现在我们自定义的group中了。
小结
这里介绍了如何添加自定义的tag作为live template。go没有java的annotation,像xorm就需要读取tag的内容,一些公司自研的框架也会用到,通过这样的配置可以少敲一些符号。
通过集成到插件里,也可以在组内比较好的同步,而不是每次新人来都去手动配置,如果有更新也只要往ide里一拖就行。
下次会介绍一下如何利用variable的expression,以及拓展macro,自己在组内实现了个通过读取函数参数以及返回内容(是单个对象或者slice)拼接查询代码的live template。
Goland(Jetbrains Idea平台)插件开发教程(二)
https://www.huihongcloud.com/2021/08/31/goland/Goland(Jetbrains Idea平台)插件开发教程(二)/