引言
随着开发年限的增长,逐渐积累了很多开发习惯,同时也积攒了开发中很多不爽的问题,如何改造IDE适应团队的开发习惯进一步提升团队开发效率以及统一代码风格变的越来越迫切,通过对IDE的改造,我们还可以及时排除代码安全隐患,提高程序的安全性与健壮性。
一、背景
大型项目代码开发过程中对代码风格要求非常严格,随着软件规模的增大复杂性也大大提高,为了保证代码风格的统一而制定了团队的编码规范,与此同时产生了另一个问题:每一句代码几乎都需要去对代码格式非常的费力。除此之外,在平时代码编写的过程中每行的都需要结尾补齐;或者{}操作,在补齐的过程中需要不断的用键盘或者鼠标去移动光标控制代码换行,长时间重复的去做这个工作非常枯燥和低效,有没有什么工具可以帮开发者自动去补齐并格式化代码从而这种重复工作中解脱出来呢?
在整理思路之后于是就有了下面这个插件,从此开发过程中只需要关心业务逻辑,每行写完直接按Ctrl+Enter就可以了,代码编写变的一气呵成。
使用效果如下:
二、插件功能设计
在收集需求之后,插件主要支持的功能如下:
行尾智能补齐和光标智能跳转
自动格式化当前行代码
Block代码块结束跳出
不需要再重复输入;和{},也不用手动的去移动光标和鼠标,只用关心业务逻辑,不用费力去拼代码格式,一段代码写完之后直接跳出开始下一段,编写变的非常连贯。那么如何改造我们的IDE实现我们的需求呢?答案就是给我们IDE开发插件。
通过开发插件,我们可以进一步完善自己的IDE,像京东商城这种大型的项目,插件的开发工作还可以紧贴到具体的业务逻辑,给研发带来巨大的便利!
三、IntelliJ平台
IntelliJ框架下有很多IDE,比如IntelliJIDEA,WebStorm,AndroidStudio,PhpStorm,PyCharm等等,这些IDE都是基于IntelliJ框架定制的,国内关于IntelliJ的开发资料非常匮乏,开发过程中整理下来一些资料和经验以便分享。
IntelliJ平台简介
IntelliJ提供了构建IDE的平台,IntelliJ是开源的可以供第三方来构建IDE,IntelliJ平台提供了一系列的基础组件,包括丰富的语言工具支持。
IntelliJ是一个组件驱动,基于JVM跨平台的应用,并且提供了高级别的工具包创建工具窗口,树视图和列表(支持快速搜索)以及弹出菜单和对话框IntelliJ还包括一个图像编辑器,以及一个完整的文本编辑器,并提供抽象的语法高亮显示的实现,代码折叠、代码完成、和其他富文本编辑功能。
此外,它还包括可插拔的API以构建常见的IDE功能,如项目模型和构建系统。它还提供了非常丰富的调试体验的基础设施,具有语言不可知的高级断点支持,调用堆栈,监视窗口和表达式评估。
IntelliJ真正强大的地方来自于PSI(ProgramStructureIndex)系统,PSI是一组功能结合,可用来解析文件,构建丰富的代码语法和语义模型,并从这些数据构建索引。以此为基础提供了许多功能,比如快速导航到文件,类型和符号,到代码编辑窗口,代码引用,代码检查和代码重写,快速修复或重构,以及许多其他功能。
IntelliJ平台模块组成
IntelliJ开发资料较少,通过阅读IntelliJ源代码,我自己大致将代码分为以下几部分,此划分非出自官方难免有些纰漏,了解各部分的功能会对开发工作有很大帮助。
BasePlatform:包括基础平台支持,多线程任务,消息传递,ProjectStructure工程结构,library,SDK等。
ActionSystem:Action动作系统,开发者可以通过插件向菜单和工具栏添加新项目来自定义IntelliJ平台UI。
PSI:构建丰富的代码语法和语义模型,代码完成代码检测都是基于此完成。
VFS:它封装了大部分对活动文件的处理操作,在不同平台上提供了统一的文件API。
GUI:常用界面的封装,对话框,工具栏,文件选择器,Notification等。
EditorBasics:获取文档,文本操作,代码定位,编辑器事件处理系统。
Plugin:插件机制,让第三方可以扩展IDE功能。
Others:其他功能,代码检测,代码完成等其他工具代码。
通过这些支持我们可以开发的IntelliJ功能大致分为四大类型:
自定义语言支持:给IDE添加一种语言支持,比如Kotlin。
框架集成:给IDE添加功能性框架,比如代码洞察。
工具集成:使IDE直接操作第三方工具而无需切换上下文。
用户自定义界面:对标准IDE的界面进行修改,并提供新的功能。
四、如何开发一个插件
开发前准备
开发用IDE:IntelliJIDEA