打造企业自己代码规范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 ...
随机推荐
- 使用flex防止fit-content子元素冲出父元素宽度的方法
父元素设置了min-width:fit-content后,其宽度由子元素的宽度来决定 <!DOCTYPE html> <html lang="en"> &l ...
- 2510-Druid监控功能的深入使用与配置-基于SpringBoot-完全使用java config的形式
环境 springboot 1.5.9.RELEASE + JDK1.8 配置步骤 分两步,1 配置数据源 2 配置监控 直接上代码 1 配置数据源 package com.company.proje ...
- 《深入了解java虚拟机》高效并发读书笔记——Java内存模型,线程,线程安全 与锁优化
<深入了解java虚拟机>高效并发读书笔记--Java内存模型,线程,线程安全 与锁优化 本文主要参考<深入了解java虚拟机>高效并发章节 关于锁升级,偏向锁,轻量级锁参考& ...
- Nuget打包并上传教程
一.准备 1 . 下载 Download NuGet.exe 2 . windows 系统下设置环境变量 path中 或者 在dos 命令窗口下cd转到 nuget.exe 所在目录,这里为了每次使用 ...
- 承上启下继往开来,Python3上下文管理器(ContextManagers)与With关键字的迷思
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_217 在开发过程中,我们会经常面临的一个常见问题是如何正确管理外部资源,比如数据库.锁或者网络连接.稍不留意,程序将永久保留这些资 ...
- 英特尔CPU系列
1.酷睿(Core)系列,主要应用于管理 3D.高级视频和照片编辑,玩复杂游戏,享受高分辨率 4K 显示. 2.奔腾(PenTIum)系列,主要应用于借助功能丰富的处理器,加快便携式 2 合 1 电脑 ...
- Servlet特性研究之异步模式
Servlet只有同步模型是怎样的? 异步处理是Servlet3.0版本的重要功能之一,分析异步处理模型之前,先看看同步处理的过程是怎样的: 客户端发起HTTP请求一个动态Servlet API,请求 ...
- ceph 009 管理定义crushmap 故障域
管理和自定义crushmap 定义pg到osd的映射关系 通过crush算法使三副本映射到理想的主机或者机架 更改故障域提高可靠性 pg到osd映射由crush实现 下载时需要将对象从osd搜索到,组 ...
- iOS越狱进度,越狱工具,一篇文章搞定
最新的 iOS 越狱状态 iOS 15.0 – 16.0 Beta 目前无法越狱, Cheyote Jailbreak 正在开发中. iOS 14.6 -> 14.8 目前在某些较新的设备(A1 ...
- rh358 001 Linux网络与systemd设置
358 rhel7 ce ansible 部署服务 dhcp nginx vanish haproxy 打印机服务 服务管理自动化 systemd与systemctl systemctl 来管理sys ...