架构
这篇文档涵盖了Biome的一些内部工作原理,以及它们在项目中的使用方式。
解析器和CST
Section titled 解析器和CST解析器的架构使用了一个内部的rowan分支,它是一个实现绿树和红树模式的库。
CST(具体语法树)是一种与AST(抽象语法树)非常相似的数据结构,它跟踪程序的所有信息,包括空白和注释。
空白和注释是程序运行所需的所有重要信息:
- 空格
- 制表符
- 注释
空白和注释被附加到一个节点上。一个节点可以有前导空白和尾随空白。如果你从左到右阅读代码,前导空白出现在关键字之前,尾随空白出现在关键字之后。
前导空白和尾随空白被分类如下:
- 直到令牌/关键字之前的所有空白(包括换行符)将是前导空白;
- 直到下一个换行符之前的所有内容(不包括换行符)将是尾随空白;
给定以下JavaScript代码片段,// comment 1
是分号';'
的尾随空白,// comment 2
是const
关键字的前导空白。以下是Biome表示的CST的简化版本:
由于设计原因,CST本身无法直接访问,开发人员可以使用Red树读取其信息,使用一系列从语言语法自动生成的API。
弹性和可恢复的解析器
Section titled 弹性和可恢复的解析器为了构建CST,解析器需要具备弹性和可恢复性:
- 弹性:解析器能够在遇到属于语言的语法错误后恢复解析;
- 可恢复性:解析器能够理解发生错误的位置,并能够通过创建正确的信息来恢复解析;
解析器在恢复阶段无法正确理解语法的情况下,需要使用Bogus
节点来标记某些语法为错误的。注意JsBogusStatement
:
以下是解析阶段的错误信息:
格式化程序(WIP)
Section titled 格式化程序(WIP)静态检查器(WIP)
Section titled 静态检查器(WIP)守护进程(WIP)
Section titled 守护进程(WIP)Biome使用了一个服务器-客户端架构来运行其任务。
守护进程是一个长时间运行的服务器,Biome在后台生成并用于处理来自编辑器和CLI的请求。