kotlin插件
自从开始Kotlin之旅以来,我想使用与Java中相同的库和工具。 对于库-Spring Boot,Mockito等,它很简单,因为Kotlin可与Java 100%互操作。 对于工具,这取决于。 例如,Jenkins可以完美工作,而SonarQube缺少专用的插件。 SonarSource团队的资源有限:尽管Kotlin呈上升趋势-但自Google I / O 17以来,情况就更是如此。 本系列文章是关于创建这样的插件的,而第一篇文章是关于解析Kotlin代码的。
ANTLR
在代码解析领域, ANTLR是JVM世界中的佼佼者。
ANTLR(另一种语言识别工具)是功能强大的解析器生成器,用于读取,处理,执行或翻译结构化文本或二进制文件。 它被广泛用于构建语言,工具和框架。 ANTLR通过语法生成可以构建和遍历语法树的语法分析器。
设计语法
借助专用的语法文件,ANTLR能够为任何语言生成解析代码。 但是,从头开始为常规语言创建这样的语法并非易事。 幸运的是,由于社区的力量, Github上已经存在Kotlin的语法。
使用此现有语法,ANTLR能够生成Java解析代码以供SonarQube插件使用。 步骤如下:
- 克隆Github存储库
git clone[email protected] :antlr/grammars-v4.git
- 默认情况下,不鼓励在根包下生成类。 更改默认值:
- 创建一个
src/main/antlr4/<fully>/<qualified>/<package>
文件夹,例如src/main/antlr4/ch/frankel/sonarqube/kotlin/api
- 将g4文件移到那里
- 在POM中,删除
sourceDirectory
并includes
antlr4-maven-plugin
配置中的位以使用默认值
- 创建一个
- 在本地Maven存储库中构建并安装JAR
cd grammars-v4/kotlin mvn install
这将生成一个KotlinLexer
和KotlinParser
类,以及target/classes
几个相关target/classes
。 随着Maven的发展,它也将它们kotlin-1.0-SNAPSHOT.jar
在target
文件夹以及本地Maven存储库中的一个名为kotlin-1.0-SNAPSHOT.jar
的JAR中。
测试解析代码
要测试解析代码,可以使用grun
命令。 这是以下内容的别名 :
java-Xmx500M-cp"<path/to/antlr/complete/>.jar:$CLASSPATH" org.antlr.v4.Tool
手动创建别名或通过OSX上的Homebrew安装antlr
软件包。
使用grun
,可以解析Kotlin代码,然后以文本和图形的不同方式显示它们。 以下要求在控制台中输入:
cd target/classes
grun Kotlin kotlinFile -tree
键入有效的Kotlin代码后,它将以文本形式生成其解析树。 通过将-tree
选项替换为-gui
选项,它将以图形方式显示树。 例如,以下树来自此片段:
funmain(args:Array<String>){
valfirstName:String="Adam"
valname:String?=firstName
print("$name")
}
为了稍后在SonarQube插件中使用JAR,已将其部署在Bintray上 。 在下一篇文章中,我们将进行适当的代码分析以检查违规情况。
kotlin插件