intellij-postfix-templates, IntelliJ IDEA的自定义后缀模板

分享于 

18分钟阅读

GitHub

  繁體
Collection of Custom Postfix Templates for Intellij IDEA
  • 源代码名称:intellij-postfix-templates
  • 源代码网址:http://www.github.com/xylo/intellij-postfix-templates
  • intellij-postfix-templates源代码文档
  • intellij-postfix-templates源代码下载
  • Git URL:
    git://www.github.com/xylo/intellij-postfix-templates.git
    Git Clone代码到本地:
    git clone http://www.github.com/xylo/intellij-postfix-templates
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/xylo/intellij-postfix-templates
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    IntelliJ IDEA的自定义后缀模板

    自定义后缀模板是一个 IntelliJ IDEA 插件,允许你定义自己的自定义后缀模板。 目前,它支持以下编程语言: Java,Scala,Kotlin ( 非类型化模板) 和 JavaScript ( 非类型化模板)。

    那么,概念模板的后缀是什么?

    由于想法 2018,你现在可以在设置 UI ( 编辑器→通用→后缀模板 ) 中定义自己的后缀模板。 然而,这是一个新特性,它比这个插件功能少。 以下是这里插件的一些优点:

    • 你可以为同一模板 NAME 定义不同的模板规则。比如 对于数组和集合应该表现不同。
    • 你可以使用模板变量( 比如。 $varName$ ),在应用模板时由用户填写。
    • 你可以使用动态模板 MACROS 来自动填充一些模板变量( 比如。 $var:suggestVariableName()$ ) 以及你可以定义默认值。
    • 你可以将模板或者模板规则的可用性限制为某些类或者库的可用性( 比如。 将 "test".val 展开为 val s ="test" 如果Lombok可用)。
    • 它允许你使用 static 导入而不是类导入( 比如。 如果向规则添加 [USE_STATIC_IMPORTS],则 array.toList 可以扩展为 asList(array),而不是 Arrays.asList(array) )。
    • 它提供了 69个有用且可以编辑的postfix模板,其中包含 184模板规则,e.g.
      • string.toIntInteger.parse(string)
      • array.toListArrays.asList(array)
      • Files.readAllLines(file.toPath(), Charset.forName("UTF-8"))
      • final String name = file.getName();
    • 基于文本的格式定义模板允许你通过复制和粘贴轻松地共享它们。

    视频屏幕

    Screen Cast

    下载

    你可以通过设置→插件→浏览库下载插件自定义后缀模板

    用法

    插件带有预定义的Java和 Scala ( 请参见下面) 模板集,可以立即应用于 Java/Scala 文件中。 例如写

     
    "1".toInt
    
    
    
     

    如果未自动显示完成弹出菜单,请按 Ctrl+SPACE。 选择 .toInt 模板并查看它的扩展方式。

    如果你想看到模板定义,只需在completiion弹出popup按下 Alt+ENTER 并选择编辑'. toint'模板。

    Java模板,给Java带来了很小的Scala/kotlin感觉

    以下模板与插件一起运行,并且应为你提供一个模板基础并有一些有用的示例:

    • .toByte.toShort.toChar.toInt.toLong.toFloat.toDouble.format - 转换字符串和数字
    • .toList.toSet.toMap - 将数组,集合,iterables和流转换为列表,集或者映射
    • .sort.sortBy - 排序数组,列表和流( 按属性)
    • .minBy.maxBy - 在数组,集合,iterables和流中找到最小/最大值
    • .groupBy - 按属性分组数组,集合,iterables和流
    • .exists.forall - 测试一个 array,一个 Collection,一个值,或者一个流是否存在给定条件的一个/全部元素
    • .reverse - 反向数组和列表
    • .concat - 连接数组,集合和流
    • .mkString - 使用给定分隔符将 array。Collection。tmodel或者流的元素( 字符串) 加入一个字符串中
    • .stream - 将iterable转换为流
    • .map - 映射列表,集合和映射的条目
    • .mapKeys - 映射地图的键
    • .mapValues - 映射地图的值
    • .getOrElseUpdate - 返回给定键的映射值或者计算它并返回它
    • .filter - 过滤列表,集合,映射和iterables的元素
    • .reduce - 减少数组,集合和iterables的元素
    • .fold - 使用中性元素减少数组。集合和iterables元素( 类似于 Scala 折叠)
    • .find - 在数组,集合,iterables和流中查找元素
    • .take - 从流中获取一定数量的元素
    • .drop - 从流中跳过一定数量的元素
    • .size - 获取长度或者 array
    • .get - 通过索引获取 array的元素
    • .forEach - 遍历数组和 optionals
    • .apply - 应用可以运行,供应商,使用者或者谓词
    • .lines - 获取文本文件,路径,输入流和字符串的行
    • .content - 获取文件,路径,输入流和url的文本内容
    • .inputStream - 获取文件,url,字符串的输入流
    • .outputStream - 获取文件的输出流
    • .bufferedReader - 获取文件,输入流和url的缓冲读取器
    • .bufferedWriter - 获取文件和输出流的缓冲写入程序
    • .printStream - 为文件和输出流获取 PrintStream
    • .r - 将字符串转换为正则表达式
    • .val - 将表达式提取为值( 类似于 .var 模板)
    • .new - 创建类的新实例
    • .soutv - 将变量打印到 System.out

    这些模板是为了给Java带来一点点的感觉。

    对于 Scala 用户,存在live模板 _ which扩展到 v -> v 以加速lambda表达式的创建。

    概念( 插件) 开发人员的特殊模板

    • .toVirtualFile - 转换为虚拟文件
    • .toFile - 转换为文件
    • .getAttributes - 获取文件属性
    • .openInEditor - 在编辑器中打开文件
    • .getVirtualFile - 获取虚拟文件
    • .getDocument - 获取概念文档
    • .getPsiFile - 获取PSI文件
    • .getPsiJavaFile - 获取 PSI Java文件
    • .getPsiPackage - 获取PSI软件包
    • .getChildrenOfType - 获取PsiElement和子类型的子元素
    • .getModule - 获取概念模块
    • .getProject - 获取想法项目
    • .runReadAction - 在 runWriteAction(...) 块中换行
    • .runWriteAction - 在 runWriteAction(...) 块中换行
    • .invokeLater - 在 invokeLater(...) 块中换行
    • .showDiff - 打开差异视图

    编辑模板

    按 Shift+Alt+P ( 或者转到菜单工具→自定义后缀模板→编辑当前语言的模板。) 为当前编辑器中的编程语言打开自定义后缀模板。 你可以轻松地更改,删除或者添加符合你需要的新模板。 注意,为了更新IDE中的后缀模板,你必须显式地保存模板文件( 威盛 Ctrl+S )。

    模板定义

    文件可能包含表单的多个模板定义:

    
    .TEMPLATE_NAME : TEMPLATE_DESCRIPTION
    
    
     TEMPLATE_RULE1
    
    
     TEMPLATE_RULE2
    
    
    . . .
    
    
    
    

    每个模板定义由模板 NAME。模板描述和任意数量的模板规则组成。 模板 NAME 用作代码完成中的键,并且模板描述显示在代码完成弹出窗口中的提示中。 模板规则定义模板可以应用的类型以及应用程序的执行方式。

    简单模板规则

    一个简单的模板规则有

    
     MATCHING_TYPE → TEMPLATE_CODE
    
    
    
    

    • 定义模板可以应用到的类型,并且
    • TEMPLATE_CODE 定义了如何在( 表达式的替换方式) 中应用模板。

    MATCHING_TYPE的选项可能与编程语言和编程语言不同:

    • MATCHING_TYPE可以是Java类 NAME 或者以下特定类型之一:
      • ANY - 任何表达式
      • VOID - 任何void表达式
      • NON_VOID - 任何非空表达式
      • ARRAY - 任何 Java array
      • BOOLEAN - 装箱或者取消装箱的布尔表达式
      • ITERABLE_OR_ARRAY - 任何iterable或者 array
      • NOT_PRIMITIVE - 任何非基元值
      • NUMBER - 任何已经装箱或者未装箱的数字
      • BYTE - 一个已经装箱或者取消装箱的字节值
      • SHORT - 装箱或者取消装箱的短数值
      • CHAR - 装箱或者取消装箱的字符值
      • INT - 装箱或者取消装箱的int值
      • LONG - 装箱或者取消装箱的长数值
      • FLOAT - 装箱或者取消装箱的浮点值
      • DOUBLE - 装箱或者取消装箱的双精度值
      • NUMBER_LITERAL - 任意数字文字
      • BYTE_LITERAL - 字节文字
      • SHORT_LITERAL - 短文字
      • CHAR_LITERAL - 字符文本
      • INT_LITERAL - 一个整型
      • LONG_LITERAL - 长文字
      • FLOAT_LITERAL - 浮点文字
      • DOUBLE_LITERAL - 双文字
      • STRING_LITERAL - 字符串文本
      • CLASS - 任何类引用
    • Scala 可以是Java类 NAME 或者以下特殊类型之一:
      • ANY - 任何表达式
      • VOID - 任何 void ( 单位) 表达式
      • NON_VOID - 任何非空( 非单位) 表达式
      • BOOLEAN - scala.Boolean 或者 java.lang. 布尔值
      • NUMBER - 任何 Scala 或者Java数字值
      • BYTE - scala.Byte 或者 java.lang. 字节
      • SHORT - scala.Short 或者 java.lang. Short
      • CHAR - scala.Char 或者 java.lang. 字符
      • INT - scala.Int 或者 java.lang. 整数
      • LONG - scala.Long 或者 java.lang. Long
      • FLOAT - scala.Float 或者 java.lang. 浮点
      • DOUBLE - scala.Double 或者 java.lang. Double
    • 的JavaScript 中,MATCHING_TYPE 必须是 ANY
    • Kotlin 中,MATCHING_TYPE 必须是 ANY

    TEMPLATE_CODE 可以是任何文本,也可以包含用作占位符的模板变量。

    • 简单模板变量的格式为 $NAME$
    • 以下模板变量具有特殊含义:
      • $expr$ - 模板应应用到的表达式
      • $END$ - 模板应用程序之后的final cursor 位置
    • 所有其他变量在模板扩展过程中将被交互替换。
    • 如果要更改变量的顺序,请设置默认值或者使用实时模板 MACROS 填充变量,可以使用以下变量格式:
      
      $NAME#NO:EXPRESSION:DEFAULT_VALUE$
      
      
      
      
      • 名称 - 变量的NAME ;在 NAME的末尾使用一个 * 跳过用户交互
      • ( no no变量- 变量的编号( 在该变量中定义变量的扩展)
      • 表达式 ( 可选) - 用于生成替换的动态模板宏( 比如。 suggestVariableName() )
      • DEFAULT_VALUE ( 可选) - 可以由宏使用的默认值

    模板示例:

    • 显示变量重新排序,变量重用,交互跳过,MACROS 和默认值的人工示例:
      
      .test : test
      
      
       NON_VOID →"$user*#1:user()$: $second#3:className()$ + $first#2::"1st"$ + $first$" + $expr$
      
      
      
      
    • 实际世界示例:将变量写入调试日志,包括开发人员 NAME。类 NAME 和方法 NAME:
      
      .logd : log a variable
      
      
       NON_VOID → Log.d("$user*:user():"MyTag"$","$className*:className()$ :: $methodName*:methodName()$): $expr$="+$expr$);
      
      
      
      

    在编写模板时,你可以使用代码完成完成类名。变量名。模板 MACROS 和箭头( → )。

    高级模板规则

    在 上面 章节中省略了一些选项。 如果你需要更多功能,则可以使用模板规则的完整格式,包括两个可选参数:

    
     MATCHING_TYPE [REQUIRED_CLASS] → TEMPLATE_CODE [FLAG]
    
    
    
    
    • ( 1 ) 是需要在 MODULE 中可用的类的一个 NAME,用于激活模板规则( 有关详细说明,请参阅下一节)。
    • 标志 ( 可选) 可以是以下标志之一:
    通过REQUIRED_CLASS编写库特定模板规则

    有时你可以能需要编写库特定的模板规则,换句话说,规则应仅应用于项目中的某个库。 例如查看这里插件提供的.val 模板:

    
    .val : extract as value
    
    
     NON_VOID [lombok.val] → val $var:suggestVariableName()$ = $expr$;
    
    
     NON_VOID → final $type*:expressionType(expr))$ $var:suggestVariableName()$ = $expr$;
    
    
    
    

    它可以应用于任何非空表达式,也可以扩展到

    
    val myVar = myExpression;
    
    
    
    

    如果lombok可用,或者

    
    final MyType myVar = myExpression;
    
    
    
    

    如果你使用的是没有lombok的Java。

    在这个exmaple模板after匹配类型之后的[lombok.val] 部分用于限制规则应用程序类 lombok.val 在类路径中可用的那些情况。

    通常,你可以在要定义限制的方括号之间使用任何类 NAME。

    标志

    如果使用 [USE_STATIC_IMPORTS] 标记模板规则,将自动导入使用的所有 static 方法,并且代码得到更多的compact。 例如让我们采用以下模板规则:

    
    .toList : convert to List
    
    
     ARRAY → java.util.Arrays.asList($expr$) [USE_STATIC_IMPORTS]
    
    
    
    

    由于使用 [USE_STATIC_IMPORTS] 扩展规则标记了规则并不会导致 Arrays.asList(array),而是将以下行添加到导入语句中:

    
    import static java.util.Arrays.asList;
    
    
    
    

    升级/重置模板并配置插件

    转到设置→编辑器→自定义后缀模板。 在这里你可以选择两个不同的lambda样式,并将模板重置为插件的预定义的。 另外,你也可以通过在预定义的模板和你的模板之间建立差异来升级你的模板文件。

    路线图

    版本 2

    版本 2已经在工作中,将在接下来的几周/月内发布。

    它将给你带来以下功能:

    • 它允许你将你的模板文件分割成多个。
    • 它允许你从网络源和本地文件中导入模板。
    • 它通过将模板与自动可以更新的web模板分离,解决了模板与插件合并的复杂更新过程。
    • 你将能够与他人共享你的模板。

    欢迎使用任何贡献。只需 fork。做更改并创建一个请求请求。

    请参见

    INT  TEMP  template  pos  POST  IDE  
    相关文章