[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
2
3
4
5
6
*
* Description: $END$
*
$param$
$return$
*/

至于为什么, 不知道, 不加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中,不要冤枉它。正确的位置在下图所示的地方。

1

自定义方法注释

上面提到了如果想自定义idea中的方法注释,需要用到Live Templates。先贴出一张截图,里面包含了笔者已经创建好的模板,用于生成笔者需要的方法注释。
2

  • 新建一个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())

3

  • $date$也是一个自定义变量,对应的表达式使用内置的date()函数,表示输出当前的日期。
  • $END$是内置的一个变量,表示模板内容生成后,光标停留的位置。生成方法注释后,可能需要填写方法的描述内容,自定义光标停留的位置可以方便后续操作。
  • 生成的自定义模板内容后,光标默认会依次停留在自定义变量的位置,需要用户手动回车确定,直至无自定义变量为止。这个默认行为有时可能是不需要的,所以编辑自定义变量时,选中“skip if defined”即可。

4

OK,模板定义完了,来试一下效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
public int add(int p1, int p2) {
// mc + 回车 生成方法注释
/**
*
* @param p1
* @param p2
* @return
*
* @author chenx
* @date 2017/03/25
*/
return p1 + p2;
}

你没有看错!这种自定义的方法注释,需要在方法内使用快捷键才能枚举出方法参数!因为内置的methodParameters()只有在方法内的作用域才起作用!好吧,笔者也觉着这点十分不爽,还是没能达到理想的效果。不过这也算是笔者目前发现的最省事的方法注释生成方式了。

其实可以发现使用Live Templates实现方法注释生成,最大阻碍是循环枚举方法参数。如果你的注释习惯允许你可以不枚举方法参数,那么恭喜你,你可以在方法外部直接使用“mc” + 回车即可。

笔者期望idea可以提供修改"/**"+回车自动生成方法注释的办法。或者有知道的朋友,请不吝赐教。

三. 自定义常用的Live Templates

上面描述了如何使用Live Templates实现生成方法注释,但最终效果笔者自认为有些牵强,不算完美。 接下来展示一些常用的代码模板定义。

依赖注入私有属性

5

Logger实例

6

7

依赖注入属性资源

8

9

这里可以发现,内容中定义的两个变量,没有指定表达式,表示需要用户手动输入对应的内容。模板内容生成后,光标会依次停留在变量的位置等待用户输入内容。

四. 总结

本文介绍了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