Posts List

第一款Goland的SCA插件开发之旅

插件开发,是一件即快乐又痛苦的事情。快乐的是你可以根据自己的需求通过插件来进行实现,比如经常看到的 Chrome 的插件开发。插件对于应用的原生生态有着很大的益处,往往那些特别优秀的插件甚至会被官方收编或者在正式功能中加入插件的功能。痛苦的是你需要去看文档,看插件开发的各种文档,如果文档不详细的话,痛苦加倍。程序猿最讨厌的事就是看别人的文档以及自己写文档。当然,除了文档,作为小白你还会踩到各种各样的坑。 先吐槽 五一期间,疫情实在是憋得无趣,于是就成生了编写一款 Goland 上的 SCA 检测的插件的想法。Jetbrains 作为一个 IDE 开发公司,通过 Java 的语言生态开发出 IDEA 全家桶系列如此精美并且功能强大的 IDE 产品。其背后的技术能力不得不让人折服。IDE 是程序猿开发的生产力,而 Jetbrains 公司则是生产力的生产力。这几天,笔者就在着力开发一款针对 Goland 的第一款 SCA 检测插件。相较于以往 Chrome 或者 Burp 的插件开发而言,Jetbrains 插件开发的难度大大提升,主要是因为以下几点原因: API 文档过于简单 IntelliJ 只提供了官方的文档地址。这里面包含了一些 API 的实现以及介绍,但是太简单了。全篇中几乎找不到相关实现的示例代码,通常只有寥寥数语的介绍。举一个例子,希望能够通过插件能够创建文件,在找遍了官方的文档后,只发现了以下内容: 文档里面提到可以使用 PsiDirectory 中的 add 方法来保存 PSI 文件,但它没说 HOW!那怎么办,只能去 Github 中去搜索代码关键字,然后扒别人的代码去看别人是如何实现的,这绝对是一个非常痛苦的过程,尤其是你看的是一个实现很糟糕的插件。 API 复杂性 由于 IDEA 强大的生态,其 API 要考虑到兼容性以及很多特性,所以 API 中很多的含义不好理解。其本身也是包含了很多复杂的配置项,同时还需要综合考虑插件是通过什么样的形式去实现。 太“强大的”官方模板 官方提供了一个创建插件的模板。首先承认的一点是这个模板的功能非常强大,涵盖插件开发、单元测试、质量检查、发布的整个生命周期,并且与 Github 无缝集成。不过作为模板,它包含的内容是不是太多了呢?这个模板的 README 几乎看了3遍之后才知道里面包含了哪些内容。实际上,对于一个小白来说,这个过程挺痛苦的,甚至可能有的人看了一下就萌发了退意。里面的一些模块,比如单元测试模块以及覆盖率检查这些模块,可以作为可选项,并不一定要默认就包含进去。 Bug 有一点点多 目前尚未确定是否这是一个 Bug,但是笔者严重怀疑这是一个 Bug。上面提到的模板,通过 Gradle 实现了一系列的任务。在 Run Verifications 中,有个小任务是 .

goland-2022.01版本最新实用功能

在 Go 的开发过程中,经常遇到一个非常麻烦的问题就是 JSON 的解析。因为 Go 中的 JSON 的解析,一般来说需要定义对应 JSON 的 struct。或者使用 interface{} 类型来进行定义,然后再进行类型的转换。当然这在 Python 中可能两三句话就搞定了。 在 Goland 2022.01 最新版本中,终于迎来了在 JSON 方面解析的便捷功能。在最新版本中,只要将 JSON 粘贴到 IDE 中就会提示是否转化为 struct 类型,所有的字段都会被生成,相对于以前的一个个的手动的定义要方便太多太多了。 还可以使用 Action 来进行转换动作,Generate Go Type form JSON: 同时还可以添加新的 tag,key 以及修改 key 的代码风格,调用来说一般使用 alt+enter 快捷键即可。 Intention actions 字段添加新的 tag 点击 struct 的字段然后按 alt+enter 选择 Add key to tags 修改 key 点击 struct 的字段然后按 alt+enter 选择 Update key value in tags 修改 key 的代码风格