“交流互鉴是文明发展的本质要求。只有同其他文明交流互鉴、取长补短,才能保持旺盛生命活力。” 这说的是文明,但映射到计算机技术本身也是相通的,开源代码/项目就是一种很好的技术交流方式。怎么借鉴开源代码来打造一些自身面对的问题解决方案?也许有一些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插件(上)的更多相关文章

  1. ​打造企业自己代码规范IDEA插件(中)

    一些基本概念 在开始独立研发公司自己的代码规范检查规则之前,先介绍一些相关的基本概念.阿里巴巴代码规范很多规则其实都是基于开源框架PMD进行的研发.PMD用官方的话语介绍来说:PMD是一个源代码分析器 ...

  2. 2016 正确 sublime安装PHPcs PHPcodesniffer代码规范提示插件,修正网上部分不详细描述

    对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香!-------------------14:37 2016/3/212016 正确 sublime安装PHPcs PHPcodesniff ...

  3. 代码规范:idea上添加阿里巴巴Java开发插件

    在一个项目中,不可缺少的是书写代码的规范,没有好的代码规范约束,大家各写各的,十分不利于代码的维护与修改.     首先来看看如何在idea上添加这个插件: 直接上图 点击右边的蓝色按钮就可以安装了, ...

  4. JAVA代码规范笔记(上)

    本文为<code conventions-150003>(JAVA代码规范)笔记. 文件组织 1.超过2000行代码的源文件将会比较难以阅读,应该避免. 2.每个Java源文件都包含单一的 ...

  5. IDEA 阿里巴巴代码规范检查插件

    1.问题概要 大家都想写出规范的代码,可规范的标准是什么勒,估计每个人心中的标准都不是完全一致的 在分工合作越来越精细化的时代,我们需要一个最大程度接近公认的规范,这里我们以阿里巴巴的代码规范作为参考 ...

  6. Webpack 2 视频教程 009 - 配置 ESLint 实现代码规范自动测试 (上)

    原文发表于我的技术博客 这是我免费发布的高质量超清「Webpack 2 视频教程」. Webpack 作为目前前端开发必备的框架,Webpack 发布了 2.0 版本,此视频就是基于 2.0 的版本讲 ...

  7. 静态代码扫描之阿里java代码规范IDEA插件

    前言 2017年2月9日,首次公布<阿里巴巴Java开发手册>; 2017年9月25日,阿里巴巴集团发布了<阿里巴巴Java开发手册>PDF终极版; 2017年10月14日,在 ...

  8. Java代码规范_插件_阿里java开发手册

    给大家分享一个阿里巴巴的java开发规范,在日常自动化工作中我们可以参考一下,特别是用java进行coding的同学. 而且还可以利用相应的插件进行代码扫描检测,感兴趣的们可以马上应用到自动化中来. ...

  9. IDEA06 代码规范检测插件之Alibaba Java Coding Guidelines

    1 官方资料 1.1 官方介绍 https://mp.weixin.qq.com/s/IbibsXlWHlM59kfXJqRvZA#rd 1.2 github地址 https://github.com ...

随机推荐

  1. IDEA快捷键之晨讲篇

    IDEA之html快捷键 快捷键 释义 ! 生成HTML的初始格式 ---- ---- 标签名*n 生成n个相同的标签 ---- ---- 标签>标签 生成父子级标签(包含) ---- ---- ...

  2. 日志审计与分析实验三(rsyslog服务器端和客户端配置)(Linux日志收集)

    Linux日志收集 一.实验目的: 1.掌握rsyslog配置方法 2.配置rsyslog服务收集其他Linux服务器日志: C/S架构:客户端将其日志上传到服务器端,通过对服务器端日志的查询,来实现 ...

  3. 如何给selenium.chrome写扩展拦截或转发请求

    Selenium.WebDriver Selenium WebDriver 是一组开源 API,用于自动测试 Web 应用程序,利用它可以通过代码来控制chrome浏览器! 有时候我们需要mock接口 ...

  4. GitHub 主页美化设置教程

    GitHub profile设置教程 早些时候逛GitHub,就发现别人的主页特别的精美,当时没有空研究,前几天得空给安排了一下 先看一下成品 贴一个github上一个男人的主页 下面这个是我的 果然 ...

  5. 【Meetup回顾】Apache DolphinScheduler在联通的实践和二次开发经验分享

    在由 openLooKeng 社区主办,Apahce DolphinScheduler社区.Apache Pulsar 社区.示说网协办的联合 Meetup 上,来自联通数字科技的王兴杰老师分享了Do ...

  6. Luogu3740 [HAOI2014]贴海报 (线段树)

    倒着来 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...

  7. Luogu1816 忠诚 (ST表)

    继续复习模板,加深理解ing... #include <iostream> #include <cstdio> #include <cstring> #includ ...

  8. 非常全的一份Python爬虫的Xpath博文

    非常全的一份Python爬虫的Xpath博文 Xpath 是 python 爬虫过程中非常重要的一个用来定位的一种语法. 一.开始使用 首先我们需要得到一个 HTML 源代码,用来模拟爬取网页中的源代 ...

  9. JavaScript 函数对象(Function 对象)

    函数对象 当我们对函数使用 typeof 操作符会返回什么? function f() { console.log('hello') } console.dir(typeof f) // functi ...

  10. HiveSql调优系列之Hive严格模式,如何合理使用Hive严格模式

    目录 综述 1.严格模式 1.1 参数设置 1.2 查看参数 1.3 严格模式限制内容及对应参数设置 2.实际操作 2.1 分区表查询时必须指定分区 2.2 order by必须指定limit 2.3 ...