打造企业自己代码规范IDEA插件(上)
“交流互鉴是文明发展的本质要求。只有同其他文明交流互鉴、取长补短,才能保持旺盛生命活力。” 这说的是文明,但映射到计算机技术本身也是相通的,开源代码/项目就是一种很好的技术交流方式。怎么借鉴开源代码来打造一些自身面对的问题解决方案?也许有一些Demo来进行回答演示或许更为贴近地气些。这里打算写一些玩转源码为主题的文字来实践的回答,最近在看P3C的一些源码,那就从这开始吧。
P3C-IDEA插件基本结构
主体功能上首先是菜单上的三个部分编码规约扫描、实时扫描开关、多语言切换,对应到Idea插件结构中的三个action:AliInspectionAction、ToggleProjectInspectionAction、SwitchLanguageAction 相关类都在com.alibaba.p3c.idea.action 包下面。三个action组成一个工具菜单(ToolMenu)组:com.alibaba.p3c.analytics.action_group 。3各action都是继承Idea插件SDK中的 AnAciton,具体执行逻辑在 actionPerformed(e: AnActionEvent) 中进行执行。

Aciton设计中,其中一个有意思的点在于利用update(e: AnActionEvent) 来进行多语言的支持。这种设计如果有需要实现Idea 插件多语言支持上都值得借鉴。

另外在Idea插件扩展上,注册了一个 AliLocalInspectionToolProvider 用于完成实时代码扫描相关构建,一些详细设计后续再细读。一个比较巧妙的点在于利用 javassist 动态构建注册相关代码规则相关执行类。

总结来说,初读完整体结构后就可以借鉴到一些设计;比如上述提及到的,Idea插件如何进行多语言设计、在大量某类代码需要进行类似改写可以利用 javassist 来进行动态注册。当然也有些觉着不好的点比如尽量还是不要进行语言混写(Icons单拎出来各 java写,而整体框架是 kotlin写)等,推测可能是由于一些插件SDK历史兼容问题导致。可以发现,在阅读源码过程种了解到的一些技术设计处理方式,这其实就是本文开头说提到的 “交流互鉴” ,这些设计技巧都可以参考应用到其他也有类似需求插件代码实践中去。在此,附上一张源码基本结构示意图:

先简单改改,添加皮肤功能
初步分析基本结构后,其实就可以利用源码进行一些尝试修改了。最近被某人吐槽不懂”emo”的含义。特别从网上搜了下意义,“在悲伤的基调下,一切的情绪不稳定皆可‘emo’。”,想到当遇到各类bug时候,程序员的心情不正是‘emo’。估且就把修改代码,取个项目名:Emo-coding-guardian,也声明下仅供研究、学习用途。

其实可以看到P3C插件做的非常精致,菜单中的图标、文字表述、状态变化后的图标都有相关设计。在了解其主体结构后,不妨添加一个自定义皮肤Config来自定义下皮肤。
先把icon相关的资源文件独立到一个文件夹进行管理,并新建一个 emo皮肤文件集合。并新建一个 SkinConfig 作为皮肤的配置类来进行相关设置,图标的ICON相关的主要在P3cIcons.java考虑语言统一性,这里用kotlin改写了下。同时,把对应的menu代码修改,在初始化阶段对ICON进行设置,如下:


相关皮肤资源的文件结构:

最终一些效果如下:

可以看到,我们在掌握了开源代码基本结构后,可以对其中一些点进行修改尝试。一方面验证是否符合我们理解,一方面也是更深入理解细节的过程。
当然打造企业自己代码规范插件并非改改皮肤,更重要的在于,如何利用P3C进行相关代码规则的编写工作。且请关注,在后续的文章中,我们再接着进行探索。
附上相关代码github链接:https://github.com/ariesfly/emo-coding-guardian
如有遇到问题欢迎公众号私信留言
打造企业自己代码规范IDEA插件(上)的更多相关文章
- 打造企业自己代码规范IDEA插件(中)
一些基本概念 在开始独立研发公司自己的代码规范检查规则之前,先介绍一些相关的基本概念.阿里巴巴代码规范很多规则其实都是基于开源框架PMD进行的研发.PMD用官方的话语介绍来说:PMD是一个源代码分析器 ...
- 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述
对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...
- 代码规范:idea上添加阿里巴巴Java开发插件
在一个项目中,不可缺少的是书写代码的规范,没有好的代码规范约束,大家各写各的,十分不利于代码的维护与修改. 首先来看看如何在idea上添加这个插件: 直接上图 点击右边的蓝色按钮就可以安装了, ...
- JAVA代码规范笔记(上)
本文为<code conventions-150003>(JAVA代码规范)笔记. 文件组织 1.超过2000行代码的源文件将会比较难以阅读,应该避免. 2.每个Java源文件都包含单一的 ...
- IDEA 阿里巴巴代码规范检查插件
1.问题概要 大家都想写出规范的代码,可规范的标准是什么勒,估计每个人心中的标准都不是完全一致的 在分工合作越来越精细化的时代,我们需要一个最大程度接近公认的规范,这里我们以阿里巴巴的代码规范作为参考 ...
- Webpack 2 视频教程 009 - 配置 ESLint 实现代码规范自动测试 (上)
原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...
- 静态代码扫描之阿里java代码规范IDEA插件
前言 2017年2月9日,首次公布<阿里巴巴Java开发手册>; 2017年9月25日,阿里巴巴集团发布了<阿里巴巴Java开发手册>PDF终极版; 2017年10月14日,在 ...
- Java代码规范_插件_阿里java开发手册
给大家分享一个阿里巴巴的java开发规范,在日常自动化工作中我们可以参考一下,特别是用java进行coding的同学. 而且还可以利用相应的插件进行代码扫描检测,感兴趣的们可以马上应用到自动化中来. ...
- IDEA06 代码规范检测插件之Alibaba Java Coding Guidelines
1 官方资料 1.1 官方介绍 https://mp.weixin.qq.com/s/IbibsXlWHlM59kfXJqRvZA#rd 1.2 github地址 https://github.com ...
随机推荐
- Linux—系统基础一
Linux系统基础(一) Linux的基本原则: 由目的单一的小程序组成,组合小程序完成复杂任务: 一切皆文件: 配置文件保存为纯文本格式. 1.shell 1.1 shell简介 Shell俗称壳( ...
- 【喜讯】新一代大数据任务调度 - Apache DolphinScheduler 社区荣获OSCHINA年度 “最佳技术团队”...
新一代大数据任务调度 - Apache DolphinScheduler 继 11 月 19 日由 InfoQ 举办.在 300+ 参评项目中脱颖而出获得 "2020 年度十大开源新锐项目 ...
- Luogu2783 有机化学之神偶尔会做作弊 (树链剖分,缩点)
当联通块size<=2时不管 #include <iostream> #include <cstdio> #include <cstring> #includ ...
- POJ2559/HDU1506 Largest Rectangle in a Histogram (cartesian tree)
Die datenstruktur ist erataunlich! #include <iostream> #include <cstdio> #include <cs ...
- LuoguP3377 左偏树 (左偏树)
TLE but corrct in most cases. inline int Find(int x){ //be careful with the way used for finding you ...
- Git 10 IDEA撤销推送
参考源 https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0 版本 本文章基于 Git 2.35.1.2 如果推送了多 ...
- which 和 that 在定语从句中作介词宾语的用法
关系代词在定语从句中作介词的宾语,且介词在关系代词之前时,关系代词应该用 which:介词在定语从句句末,关系代词可以用 that 或 which. (一)He teaches in a school ...
- 【java】学习路径31-文件IO基本操作(未涉及到流)
一.初始化: File f1 = new File("//Users//Shared//JavaIOTest//Test01.txt"); File f2 = new File(& ...
- k8s手动扩缩容
1. 查询deploy副本数,ready数表示副本数 kubectl get deploy 2.通过命令直接扩容或者缩容,--replicas=1表示把my-dep缩容到副本数1,--replicas ...
- 被一位读者赶超,手摸手 Docker 部署 ELK Stack
被一位读者赶超,容器化部署 ELK Stack 你好,我是悟空. 被奇幻"催更" 最近有个读者,他叫"老王",外号"茴香豆泡酒",找我崔更 ...