深入了解抽象语法树(AST)及其在使用工具和库中的应用

在本文中,我们将深入了解抽象语法树(ast)及其在日常工作中使用的工具和库中的应用。我们更感兴趣的是ast的实际使用和应用,而不是编译器、解析器等编程语言开发工具的晦涩学术理论。
这是一系列文章中的第一篇,该文章探讨了freshworks的前端开发人员构建和使用的各种ast工具来执行大量活动,例如大规模代码迁移、重构等。
ast 探索者    
有一个在线工具可以探索由各种语言解析器生成的ast,称为astexplorer,由facebook的工程师构建。它支持多种语言和解析器。您可以输入代码并获取它表示的ast格式,并在同一浏览器窗口中检查节点和数据。您还可以编写转换函数,这将帮助您使用ast更改或重构代码。对于任何想要了解ast并在其帮助下创建工具的人来说,这是学习和使用ast的最佳工具。
为什么ast对工具很重要?    
抽象语法树是任何语言开发工具的构建块,因为它们是有效操作源代码的可扩展手段。通过将代码表示为树状结构,您可以利用树数据结构附带的所有有效操作机制。它比处理以文本片段或字符串表示形式表示的源代码要快得多。这是因为如果您想对源代码进行高级和复杂的操作,那么使用纯字符串和字符序列将是一场噩梦。如果您希望有一个方便的表示来对您的代码进行更改而不会产生意想不到的后果和副作用,那么ast是最好的表示。将源代码转换为抽象语法树格式后,
这就是为什么所有语言标准都默认带有ast规范的原因。该语言本身具有用于创建、转换和使用ast的内置api。除此之外,总会有外部工具和库使使用ast成为一项方便而轻松的任务。
那么我们实际上在哪里使用ast呢?简而言之,它在工具和库的javascript生态系统中无处不在。从这个列表中可以看出,如果没有ast,则根本不可能为javascript项目提供工具。
语法高亮
代码完成
静态分析
代码覆盖率
缩小
即时编译
源地图
编译成js语言
代码重构
代码迁移等等。
代码模组    
在freshworks,当我们尝试将ember代码迁移到新版本时,我们首先遇到了像codemods这样的ast工具。ember框架和社区本身提供了许多codemods来帮助您更轻松、更省时地进行迁移。我们已经写了一篇关于我们如何使用codemods来迁移我们的代码库的博客文章
您可能想查看它以重新了解codemod,包括为什么它们有意义,以及为什么它们应该成为您的自动迁移工具的关键部分。甚至诸如react、angular和vue之类的框架也推荐并提供codemods用于从框架的一个版本迁移到下一个版本的升级。
一旦我们开始使用codemods进行迁移,我们的开发人员发现将他们的代码迁移到较新版本的框架非常有用且节省时间。我们需要越来越多的codemod来解决我们的一些迁移问题。因此,我们开始探索和编写专门解决我们自己的代码迁移问题的codemod,但同时使codemod更加通用,以便我们可以与更大的javascript开发人员社区共享它们并使其开源。
但是我们的一些开发人员无法完全掌握ast等codemod的底层架构以及babel、recast和jscodeshift等相关工具。所以我们决定让我们的开发人员更容易理解这一点,并减少学习的痛苦。我们围绕ast构建了一堆工具来帮助开发人员熟悉ast和codemods。本系列博文将深入探讨这些工具的内部架构和组件,从而抓住这些工具的本质和意义。


MAX9679B 12通道10位可编程gamma和VCOM基准电压
直线电机模组激光打标助力月饼防伪
苹果高通结束两年专利之战 谁才是真正的赢家
一文读懂POE测试来龙去脉
电子战规划和管理工具(EWPMT)的可视化系统
深入了解抽象语法树(AST)及其在使用工具和库中的应用
未来Android旗舰手机可以在Windows 10上运行
New RelicInc推出了新的人工智能操作能力
ofweek mall ZF角度位置传感器AN1中检测系统如何使用
熔端型光纤连接器怎么用 光纤连接器类型有哪些
共模扼流线圈电感测试时发热异常的原因
离职让百度损失近900亿 引发4万员工“集体失恋”
官宣:OPPO秋季新品发布会将于9月16日召开
新型独立线性锂离子电池充电器
三极管种类和三极管的种类分法
顶级VC要入局了?中国版ChatGPT何时来
毫米波雷达在ADAS中主要起到哪些作用?
中国5G芯片面临的4大瓶颈问题以及对高通的影响
高效智能电源标杆,安森美3kW EliteSiC电源设计参考
物联网试点炼狱如何避免出现