首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一次有趣的 Kotlin 语法解析实践

既然有 java 文件解析,那一定就有 kotlin 文件解析,google 搜了下,查到了三个库: kotlin-parser[2] : 调研发现有点难用,无法根据注解方法的回调遍历注解参数 kastree...[3]:遍历简单,可以拿到 Node 节点进行向下遍历 kotlinx.ast[4] :大而全的 ast 解析库,适配的规则非常多,但使用起来有点重 简单了解和 demo 测试,决定使用 kastree...这个轻量级的库来实现, README 的描述,可以写个简单的伪代码: // 读取 kt 文件内容 val code = File("xx/test.kt").readText() // 生成解析器...我们解析拿到了内容之后,那接下来的生成 json 文件就更简单了,我们只需给每个待解析的 kt 文件创建个 JSONObject 节点,然后解析到的信息都 put 进去,如果有多个文件的话,则创建个...: https://github.com/sarahBuisson/kotlin-parser [3]kastree: https://github.com/cretz/kastree [4]kotlinx.ast

91130

Lint Tool Analysis (3)

Lint检查器的前提知识 首先我们需要了解的是,lint工具实现lint检查使用了Visitor设计模式,推荐阅读这篇文章看下一般如何来实现这个设计模式。...[大致内容] Android Studio 2.2版本,为了支持Java 8(Android Nougat支持Java 8),开发者完全重写了lint工具对Java代码的解析。...以前使用的是Lombok AST(连Java 7都不支持),现在使用的是PSI(和Intellij内部对Java代码解析使用的是同一套API,但是lint除外,它使用的是ECJ [Eclipse Compiler...PSI API有很多好处,它更加简洁,并且内置了类型解析功能(Lombok不知道类型解析)。所以,开发者原有的lint检查项基本上全部使用PSI API重写了一遍,下面是重写的提交记录。...对上面声明的并且lint检查遇到的那些方法进行检查,看它们是否符合规范,如果不符合规范的话就会report出错误信息。

97610
您找到你想要的搜索结果了吗?
是的
没有找到

Kotlin 程序设计》第七章 Kotlin 编译过程分析第七章 Kotlin 编译过程分析

如果同时有多个满足最长匹配的正规式,则生成的词法分析器将从中选择最先出现在词法规则描述的正规式。确定了起作用的正规式之后,执行贵正规式所关联的动作。...如果没有匹配的正规式,词法分析器终止对输入流的分析并给出错误消息。 最后,KotlinLexer调用_JetLexer进行词法分析。...语法分析过程,会生成语法树(ST)/抽象语法树(AST)。...PSI文件(PSI File)则能够源代码文件内容表示特定编程语言元素的层次结构。说的通俗一点,PSI文件可以把Java、XML等语言代码表示层次结构(树)的形式。...例如,IntelliJ开源的项目来看,PsiJavaFile可表示Java文件,XmlFile表示XML文件。

1.6K20

Lombok介绍和使用

目录 Lombok简介 Lombok使用 添加maven依赖 安装插件 编译出错问题 示例 Lombok分析 Lombok常用注解 Lombok工作原理 运行时解析 编译解析 Lombok的优缺点...编译出错问题 编译出错,可能是没有enable注解处理器。Annotation Processors > Enable annotation processing。设置完成之后程序正常运行。...Lombok常用注解 常用的几个注解: @Setter 注解类或字段,注解所有字段生成setter方法,注解字段上只为该字段生成setter方法。...编译解析 编译解析有两种机制,分别简单描述下: 1)Annotation Processing Tool apt自JDK5产生,JDK7已标记为过期,不推荐使用,JDK8已彻底删除,自JDK6开始...使用javac的过程,它产生作用的具体流程如下: javac对源代码进行分析,生成了一棵抽象语法树(AST) 。 运行过程调用实现了“JSR 269 API”的Lombok程序 。

67920

Chapi —— 一个通用语言元信息转换器

结合疫情的影响,我结束了打苍蝇乐的休息时间,月初(2020.2.1)便启动了 Chapi 项目的开发,使用的语言是 Kotlin。...只有充分的测试,才能保证语法解析出错Kotlin 语言。Java 是 Antlr 框架的一等公民,Kotlin 是 JVM 系,更加简洁。 主流编程语言支持。...插件化 AST:基于 Antlr 的 AST 解析 有了基础模型之后,我们要做的事情就是程序员应该做的事情:AST 解析。我们需要编写多种编程语言的 AST,好在我们已经有了 Antlr。...生成数据结构(class/struct)的依赖关系 可视化项目的依赖情况 自动化重构代码 …… 除此,我们还可以: A 语言的领域模型转换到 B 语言中(整洁架构条件下:纯编程语言实现,无第三方依赖...在这里,你学会: 真实世界的 Kotlin 实战 成为一个代码专家 熟悉某一语言、多个语言的语法树解析 TDD 的手把手实战 开源项目经验 怎样?一起玩吧!

64920

打破国外垄断,开发中国人自己的编程语言(1):编写解析表达式的计算器

我们只使用Intellij IDEA的最基础功能,所以CE(社区版)版足够了,这个版本是免费的。 安装完Intellij IDEA CE后,到下面的页面下载antlr4工具相关的库。...然后lib目录的右键菜单中点击“Mark Directory as”>“Sources Root”菜单项,lib编程源代码目录,这样Intellij IDEA CE就会搜索lib目录的所有库。...本例使用了第2种方式来遍历AST,但本系列文章的大多数代码主要使用listener来遍历AST。listener方式会在后面的文章详细介绍,这里主要介绍visitor。...其实这两种遍历AST的方式的原理类似,都是遇到了一个节点,就会调用相应的回调方法,然后必要的信息作为参数传入回调方法,用户可以回调方法完成代码生成、数据处理、中间代码优化等工作。...、输出是AST) (4)开始遍历AST 这4步已经Hello类做了详细的注释,大家可以自行查看。

2.3K40

IntelliJ IDEA - 2022.2 正式发布!众多特性解读!

Kotlin 支持 Kotlin 调试器的数据流分析 我们已将 Kotlin 调试器与数据流分析功能集成,现在它会显示 DFA 提示,显示哪些条件真以及执行哪些分支。...支持 Kotlin 内联函数 Kotlin 内联函数现在与其他函数一起显示Flame Graph、Call Tree和Method List,允许您查看它们的 CPU 时间并在需要对其进行优化。...现在,完成和解析都可以 Vue 与 Pinia 库一起使用,并且您可以导航到商店定义的状态属性和操作。...如果模块tsconfig.json文件设置 node16 或 nodeext,它将自动.js扩展名插入到 import 语句中。...Scala 更好的 Scala 3 支持 从 v2022.2 开始,IntelliJ IDEA 可以从.tasty文件读取匹配类型,正确解析它们,解析类型变量,将它们用作类型参数,支持检查,并将类型显示文本

5.1K40

IntelliJ IDEA 2022.2 正式发布,功能真心强大!

Kotlin 调试器对数据流分析的支持 已将 Kotlin 调试器与数据流分析功能集成,因此现在它可以 DFA 提示显示哪些条件 true 以及哪些分支将被执行。...IntelliJ IDEA 原生构建器使用项目中配置的 Kotlin 编译器版本 从 v2022.2 开始,捆绑的 Kotlin 编译器不再与 IntelliJ IDEA 原生构建器搭配使用。...,以及类型显示文本。...新的 Scala 检查 匿名函数内部使用 return 关键字跳出函数而不执行其中的所有代码IntelliJ IDEA 2022.2 现在会发出警告。...IDE 现在考虑用户定义的文件高亮显示设置。编译现在更少触发并使用更少的后台线程。编译范围已缩小到相关模块和源代码范围。

2.3K10

IntelliJ IDEA 2021.3 激活码 永久激活 2022注册码 长期稳定 亲测

调试器可以检测 Kotlin 内联函数并在堆栈跟踪面板显示内联函数调用。Kotlin的新常量条件检查可帮助 IntelliJ IDEA 报告静态已知始终真、假、空或零的非平凡条件和值。...我们已经可以使用选项卡拆分“运行”工具窗口。这允许您同时运行多个配置并查看所有结果。搜索操作IntelliJ IDEA 的Search Everywhere使用机器学习对结果进行排名。... IntelliJ IDEA 测试流应用程序时,您不再需要等待流结束,因为 HTTP 客户端即时显示输出。HTTP 客户端可以检测响应的图像并在响应控制台中显示它们的预览。... HTTP 客户端,可以使用 >> 和 >>! 输出重定向到自定义文件或目录。运营商。请求标识符可以通过@name 作为注释添加,也可以作为第一个分隔符 (###) 的文本添加。... 'org.jetbrains:annotations:22.0.0' 添加到项目依赖项,您可以类和方法注释 @Blocking 或 @NonBlocking。

4.7K40

K2 编译器是什么?世界第二高峰又是哪座?

正是因为这个原因,出现了一系列的高级语言与编译器,显著简化了编程体验 编译器的作用就是源代码输出机器码或者目标代码 如上所示,Kotin编译器可以Kotlin代码编译成jvm字节码,除此之外,Kotlin...Pet类型的,语义信息需要解析所有使用的类型,并找到他们引用的类或者接口,然后以相同的方式进行解析 如图调用了meow函数,语义信息的目标是理解在这种情况下该使用哪个函数,比如可以是类的成员函数,也可以是同名的扩展函数...,函数类型的属性,语义分析器需要选择出最合适的那个 语义分析器还有一个重要作用是类型推断,有时我们声明属性不需要指定类型,编译器可以推断出属性的类型,这也是由语义分析器来完成的 当语法不正确,语法解析器会抛出错误...,Kotlin可以源代码编译成3个平台的目标代码,因此也有着3个不同的编译器后端,不同的目标平台转换语法树和信息 上文提到,编译器后端包括一个可选的中间代码生成器,Kotlin刚开始开发,为了加快开发速度...因此Kotlin团队开发Native后端引入了IR 可以看到Native后端遵循了龙书的经典方法,生成中间代码的阶段和基于IR生成目标代码的阶段分离,这一设计的目的是考虑到IR将来可能可以不同的后端之间复用

73840

IntelliJ IDEA 2022正式发布!这次打死我也不更了。。

IDEA 重新设计了 Maven Archetype 项目生成器,2022.1 版本浏览原型引入了“键入时搜索”功能,以及模块创建期间管理原型目录的能力。... UML 图导出其他格式 现在可以 UML 图导出 yEd .graphml、JGraph .drawio、Graphviz .dot、带位置的 Graphviz .dot、Mermaid .md...IDE 性能 优化了包索引,大大提高了 IDE 执行代码完成、突出显示和与参考搜索等相关操作的速度,代码更改后发生的重新索引案例的数量和范围也有所减少。...使用这些功能需要在 IntelliJ IDEA Ultimate 安装 Go 插件,目前仅适用于标准库函数。...更好地支持 .proto 文件 .proto 文件引入了一个新的意图操作:解析的消息引用添加了缺失的导入语句,添加缺少的导入语句后, IDE 提供消息引用的补全建议。

3.5K40

十分钟搞懂Lombok使用与原理

IntelliJ安装Lombok 通过IntelliJ的插件中心安装 http://static.cyblogs.com/QQ20200425-164854@2x.jpg 最后需要注意的是,使用lombok...其次,如果想在编译阶段利用注解来进行一些检查,对用户的某些不合理代码给出错误报告,反射的使用方法就无能为力了。而 JSR 269 之后我们可以 Javac的编译期利用注解做这些事情。...具体详细步骤如下: http://static.cyblogs.com/16140d77d8050b6c.png 上图是 Lombok 处理流程,Javac 解析成抽象语法树之后(AST), Lombok...常用的项目管理工具Maven所使用的java编译工具来源于配置的第三方工具,如果我们配置这个第三方工具Oracle javac的话,那么Maven也就直接支持lombok了; Intellij Idea...IDE发现B类源代码中所使用的A类实例的setter和getter方法A类源代码找不到定义,IDE会认为这是错误 要解决以上这个不是真正错误的错误,可以下载安装Intellij Idea的"Lombok

1.3K10

听GPT 讲Rust源代码--srctools(37)

实现了Serialization trait,以便这些结构体和枚举类型序列化为JSON格式,这在检测到未使用非尽属性注解非常有用。...它实现了rustc_ast::visit::Visitor trait,用于Rust代码的抽象语法树查找和解析属性。...Char:表示检查特定字符范围的变体,用于发出错误信息。 CharRange枚举的作用是ManualIsAsciiCheck结构体提供了一种简便的方式来表示和处理不同的字符范围。...总的来说,rust/src/tools/clippy/clippy_dev/src/setup/intellij.rs文件的作用是为了IntelliJ IDE配置和使用Clippy lint工具,并通过...因此,Clippy作为Git钩子可以代码变更自动运行Clippy的分析并给出建议。 git_hook.rs文件定义了install_hooks函数,该函数负责进行Git钩子的安装。

7710

十分钟搞懂Java效率工具Lombok使用与原理

img 最后需要注意的是,使用lombok注解的时候记得要导入lombok.jar包到工程,如果使用的是Maven Project,要在pom.xml添加依赖。...其次,如果想在编译阶段利用注解来进行一些检查,对用户的某些不合理代码给出错误报告,反射的使用方法就无能为力了。而 JSR 269 之后我们可以 Javac的编译期利用注解做这些事情。...img 上图是 Lombok 处理流程,Javac 解析成抽象语法树之后(AST), Lombok 根据自己的注解处理器,动态的修改 AST,增加新的节点(所谓代码),最终通过分析和生成字节码。...常用的项目管理工具Maven所使用的java编译工具来源于配置的第三方工具,如果我们配置这个第三方工具Oracle javac的话,那么Maven也就直接支持lombok了; Intellij Idea...IDE发现B类源代码中所使用的A类实例的setter和getter方法A类源代码找不到定义,IDE会认为这是错误 要解决以上这个不是真正错误的错误,可以下载安装Intellij Idea的"Lombok

51521

babel ES6 转换 ES5 实现原理

前言 前面写过一篇简单的 AST 抽象语法树的文章简述 AST 抽象语法树。今天来看一下 babel 是如何 ES6 转换为 ES5 的 。... webpack babel-loader 就是通过这个包实现。babylon:babel 的词法解析器。原始代码逐个字母地像扫描机一样读取分析得出 AST 语法树结构。...函数,用于提供给一些 plugins 使用 babel-code-frames:用于生成错误信息,打印出错误点源代码帧以及指出出错位置 babel-plugin-xxx:babel 转译过程中使用到的插件...Parser 解析 第一步主要是 ES6 语法解析 AST 抽象语法树。简单地说就是代码打散成颗粒组装的对象。这一步主要是通过 babylon 插件来完成。 2....转换的过程如下: 使用 在线 astexplorer 代码块解析AST 语法树。

77220

探索 IntelliJ IDEA 2024.1最新变化:全面升级助力编码效率

复制粘贴保留 static import 版本 2024.1 可以准确保留 static import,确保其传输完全遵循源代码的显示方式。...我们修正了首次使用 Use sbt for builds(构建使用 sbt)运行 Scala/JVM 应用程序时引发异常的问题,并确保导入期间模块的所有传递依赖项作为直接依赖项插入。...工作表使用 Scala 2.13.12 ,编译错误会在构建窗口中再次正确报告,并且第一次代码编译之前 import 不会再被错误地标记为未使用。...现在,IntelliJ IDEA 可以识别重命名工作流,使用着色 JAR 及其依赖项提供准确的代码高亮显示和导航。...从快速文档弹出窗口直接访问源文件 快速文档弹出窗口现在提供了一种下载源代码的简单方式。 现在,查看库或依赖项的文档并需要访问其源代码,按 F1 即可。

1.1K20

IntelliJ IDEA 2024.1 更新亮点汇总:全面提升开发体验

复制粘贴保留的静态导入 版本 2024.1 准确保留静态导入,确保它们的传输完全按照源代码的显示方式进行。这在处理嵌套对象、枚举和 Java 静态导入时特别有价值。...工作表使用 Scala 2.13.12 构建窗口中再次正确报告编译错误,并且第一次代码编译之前导入不再被错误地标记为未使用。...构建工具 Maven 项目的打开速度提升 IntelliJ IDEA 现在通过解析文件来构建项目模型pom.xml 。...现在,IntelliJ IDEA 可以识别重命名工作流程,使用着色 JAR 及其依赖项提供准确的代码突出显示和导航。...从快速文档弹出窗口直接访问源文件 快速文档弹出窗口现在提供了一种下载源代码的简单方法。现在,当您查看库或依赖项的文档并需要访问其源代码,只需按 即可F1。

1.3K10

IntelliJ IDEA2021.3 新版 即将来袭,这次又带来了哪些神仙功能

小编从官网大概了解了下,目前最新的稳定版本2021.2.3,而在这个基础上2021.3也早已经已经发布了多个EAP版本,官方也已经2021.3版本(不稳定)预发布,供大家下载使用。...2、主要更新 IntelliJ IDEA 2021.3 EAP 1 改进了调试器 UI 用于跟踪不安全字符串的新检查 能够从 IDE 合并请求并为 Space 项目创建代码审查 能够文件标记为空间代码审查查看...重新设计的 Maven 配置 IntelliJ IDEA 2021.3 EAP 2 新书签工具窗口 Kotlin 的调试器改进 Kotlin提取常量重构 支持 Windows 上的 Async Profiler...具体使用:要使此检查起作用,您应该字符串注释 @Untainted(“安全”)或 @Tainted(“不安全”)。...当开发人员通过远程开发工作流工作,他们的机器上不会驻留任何源代码。该公司的数据授权存储库仍然是安全的。 代码安全性有保证。

3K00
领券