Idea便捷注释-liveTemplate
[TOC]
最简化配置介绍
方法注释:打开file->setting->Editor->LiveTemplate → +号 → Template Group → testTemplate → OK
→ 选中testTemplate → +号 → LiveTemplate → Abbreviation: * , Desciption: add class comment → (如果要想要在方法内使用,必要条件: 1 Abbreviation: * 、2 Option→Expand with→Enter 、3 Template text中的【开头】【严格】按照如下格式(即以*
第一行置顶开头) , 4 然后手打 /**
再按 Enter
键)
1 | * |
至于为什么, 不知道, 不加live template的话, 直接输入/**
再回车 能且仅能获得 param
如有疏漏或者理解偏差, 敬请斧正
→ Edit variables → 所有(variables)变量都要填一个表达式(Expretion) 【常用的如下】【本文最下方,有官方解释(在模板变量中使用的预定义函数)】
params参数的Expretion内容
groovyScript(“if(”${_1}".length() == 2) {return ‘’;} else {def result=’’; def params="${_1}".replaceAll(’[\\[|\\]|\\s]’, ‘’).split(’,’).toList();for(i = 0; i < params.size(); i++) {if(i<(params.size()-1)){result+=’ * @param ’ + params[i] + ’ : ’ + ‘\n’}else{result+=’ * @param ’ + params[i] + ’ : '}}; return result;}", methodParameters());
return参数的Expretion内容
groovyScript(“def returnType = “${_1}”; def result = ’ * @return : ’ + returnType; return result;”, methodReturnType());
Expretion:
user()
date()
time()
className()
$END$
表示光标最后的停留位置
关于Intellij IDEA中的Live Templates实践
一~四 转自:https://my.oschina.net/angerbaby/blog/867090
[IntelliJ IDEA]
[面试:你懂什么是分布式系统吗?Redis分布式锁都不会 ]
一. 前言
关于idea,相信已经是炙手可热的一款IDE了。越来越多的Java开发人员更倾向于选择idea。今天笔者聊一下关于idea中的Live Templates功能,Live Templates允许用户自定义功能丰富的代码模板,通过快捷键的方式可以迅速生成一段代码模板,然后只需要微调一下即可。比如我们常用的foreach代码块、if代码块等等,当然Live Templates的强大远不止于此,其内置的功能函数以及支持Groovy脚本语言的特性,允许你做一些“更疯狂”的事情,只要你想去做。
在本文中,笔者结合自己的实践经历,简单介绍一些关于Live Templates的应用场景,希望起到一种入门引导的作用。
二. Live Templates实现方法注释
习惯使用Eclipse的用户,相信会依赖其自动生成类和方法注释的功能,其中包含了必要的javadoc注解,比如@param、@return、@author等。在Eclipse中用户还可以定制自动生成注释的行为。
那么如何在idea中自动生成类和方法注释(注释中需要对应的javadoc注解)呢?
idea中的方法注释
idea中并不是不支持生成方法注释,在方法定义上面输入"/**"+回车,idea会根据当前方法中的参数和返回值,生成方法注释,其中会有@param和@return。
但是如果想修改一下自动生成方法注释中的内容,目前笔者没有找到任何办法。比如想在自动生成的方法注释中添加@author内容、添加日期信息,"/**"+回车的方式是不可行的。
按照自定义idea中方法注释的思路去网上搜索,会发现更多的建议是应用Live Templates来自定义满足自身需要的方法注释。
idea中的类注释
这里穿插一段关于idea类注释的说明。其实在idea中每新建一个java类,类文件头部会自动生成一段类注释。
idea允许用户自定义类注释的内容,但是相信很多人受自定义方法注释的影响,第一反应就是去Live Templates中查找idea使用的默认类注释模板。
其实笔者想在这里强调的是,自定义idea中的类注释模板,不在Live Templates中,不要冤枉它。正确的位置在下图所示的地方。
自定义方法注释
上面提到了如果想自定义idea中的方法注释,需要用到Live Templates。先贴出一张截图,里面包含了笔者已经创建好的模板,用于生成笔者需要的方法注释。
- 新建一个group,命名为“self”,表明这个组里面的模板是自定义的,可能仅适用于自己的工作场景。
- 在组里新建一个模板,快捷键定义为“mc”,确认方式选择“Enter”,即在应用模板的地方,输出“mc”+回车,即可生成模板内容。
- 观察图中的模板内容,$param$表示一个自定义的变量,用于枚举方法中的参数,即@param的内容。但是这里有个问题,就是如何循环生成方法的多个参数并且换行显示呢?虽然Live Templates中提供了一个功能函数-methodParameters(),但这个函数可以理解为只是“一串”参数,怎么拆分显示呢?这里用到了Groovy脚本语言,将$param$这个变量对应的表达式写为执行Groovy脚本,即拆分methodParameters()返回的“一串”参数,并在每个参数前面添加@param并换行。
1 | groovyScript("def result=''; def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {result+='* @param ' + params[i] + ((i < params.size() - 1) ? '\\n\\b' : '')}; return result", methodParameters()) |
- $date$也是一个自定义变量,对应的表达式使用内置的date()函数,表示输出当前的日期。
- $END$是内置的一个变量,表示模板内容生成后,光标停留的位置。生成方法注释后,可能需要填写方法的描述内容,自定义光标停留的位置可以方便后续操作。
- 生成的自定义模板内容后,光标默认会依次停留在自定义变量的位置,需要用户手动回车确定,直至无自定义变量为止。这个默认行为有时可能是不需要的,所以编辑自定义变量时,选中“skip if defined”即可。
OK,模板定义完了,来试一下效果。
1 | public int add(int p1, int p2) { |
你没有看错!这种自定义的方法注释,需要在方法内使用快捷键才能枚举出方法参数!因为内置的methodParameters()只有在方法内的作用域才起作用!好吧,笔者也觉着这点十分不爽,还是没能达到理想的效果。不过这也算是笔者目前发现的最省事的方法注释生成方式了。
其实可以发现使用Live Templates实现方法注释生成,最大阻碍是循环枚举方法参数。如果你的注释习惯允许你可以不枚举方法参数,那么恭喜你,你可以在方法外部直接使用“mc” + 回车即可。
笔者期望idea可以提供修改"/**"+回车自动生成方法注释的办法。或者有知道的朋友,请不吝赐教。
三. 自定义常用的Live Templates
上面描述了如何使用Live Templates实现生成方法注释,但最终效果笔者自认为有些牵强,不算完美。 接下来展示一些常用的代码模板定义。
依赖注入私有属性
Logger实例
依赖注入属性资源
这里可以发现,内容中定义的两个变量,没有指定表达式,表示需要用户手动输入对应的内容。模板内容生成后,光标会依次停留在变量的位置等待用户输入内容。
四. 总结
本文介绍了Live Templates功能的简单应用,关于更复杂,更强悍的功能实现,需要不断地学习了解Live Templates的特性。养成良好的工作习惯,将自己熟悉常用的代码片段进行提炼,生成模板,相信对你的工作一定会起到事半功倍的效果。
关于idea中如何自定义生成方法注释,如果有更好的实现或建议,请多多指教~
五. 在模板变量中使用的预定义函数(注释 表达式 Expression)
文件模板变量#
一个 文件模板可以包含变量,这是他们的值替代应用模板时。变量是一个以美元符号($
)后跟变量名称开头的字符串。变量名称可以选择用大括号括起来。例如:$MyVariable
并且 ${MyVariable}
是同一变量的不同符号。
预定义的模板变量#
可以在文件模板中使用以下预定义变量:
变量 | 描述 |
---|---|
${DATE} |
当前系统日期 |
${DAY} |
当月的当天 |
${DS} |
美元符号($ )。此变量用于转义美元字符,因此不会将其视为模板变量的前缀。 |
${END} |
完成编辑变量后的插入位置 |
${FILE_NAME} |
新PHP文件的名称(如果启用了PHP插件) |
${HOUR} |
当前时间 |
${MINUTE} |
当前分钟 |
${MONTH} |
这个月 |
${MONTH_NAME_FULL} |
当月的全名(1月,2月等) |
${MONTH_NAME_SHORT} |
当前月份名称的前三个字母(Jan,Feb等) |
${NAME} |
新实体的名称(文件,类,接口等) |
${PACKAGE_NAME} |
创建新类或接口文件的目标包的名称 |
${PRODUCT_NAME} |
IDE的名称(例如,IntelliJ IDEA) |
${PROJECT_NAME} |
当前项目的名称 |
${TIME} |
当前系统时间 |
${USER} |
当前用户的登录名 |
${YEAR} |
今年 |
IntelliJ IDEA为PHP包含模板提供了一组附加变量,用于定义可重用的代码片段,例如文件头和PHPDoc注释。
PHP包含模板中可以使用以下附加预定义变量:
变量 | 描述 |
---|---|
${CARET} |
完成编辑变量后的插入位置。仅在文件创建期间生成并插入PHPDoc注释时应用。当通过Code |创建PHPDoc注释时 生成| PHPDoc块,可以选择多种功能或方法。可以为多个类,函数,方法或字段创建此案例中的文档注释,因此将${CARET} 忽略该变量。 |
${CLASS_NAME} |
定义了生成PHPDoc注释的字段或方法的类的名称 |
${NAME} |
将为其生成PHPDoc注释的类,字段或函数(方法)的名称 |
${NAMESPACE} |
类或字段命名空间的完全限定名称(不带前导斜杠) |
${PARAM_DOC} |
参数的文档注释。评估一组@param type name 行。如果生成注释的函数不包含任何参数,则求值为空字符串。 |
${STATIC} |
static 如果生成PHPDoc注释的函数(方法)或字段是静态的,则 替换为关键字。否则计算为空字符串。 |
${THROWS_DOC} |
文档注释异常。评估一组@throws type 行。如果生成注释的函数不抛出任何异常,则求值为空字符串。 |
${TYPE_HINT} |
返回函数(方法)的值以生成PHPDoc注释。如果通过函数(方法)的静态分析无法检测返回类型,则求值为void 。 |