sxzz/ast-explorer · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
AST Explorer
AST Explorer - 一个用于探索解析器生成的 AST 的 Web 工具。
- 稳定版:ast-explorer.dev
- 开发版:dev.ast-explorer.dev
欢迎通过 PR 添加更多语言和解析器!
功能
- 🦾 通过 Monaco Editor 启用代码高亮、建议和格式化。
- 🤩 支持大多数流行的前端语言和解析器。
- 🗒️ 通过 URL 保存您的代码。无需数据库,无服务器停机。
- 🐙 通过 CDN 自定义解析器版本,例如
@babel/parseralpha。 - 🌈 通过 GUI 设置自定义解析器选项。
- 🌚 美观的深色模式主题。
- 📱 甚至兼容移动设备。
语言和解析器
- JavaScript / TypeScript
- Vue
- Svelte
- Ember
- Astro
- Angular
- CSS
- HTML
- JSON
- Markdown
- YAML
- Rust
- SQL
- PHP
- Java
- Python
- C#
- Solidity
- WXML
- GraphQL
- Protocol Buffers
更多解析器通过 web-tree-sitter,参见 tree-sitter 解析器。
URL 编码算法
输入代码和选项以哈希片段的形式存储在 URL 中,
即 # 符号之后的字符串,
且不会传输到服务器。
实现
const code = 'code'
const parserId = 'acorn'
const optionsString = JSON.stringify({
ecmaVersion: 'latest',
sourceType: 'module',
})
const serialized = utoa(
// utoa, or compress() if want to compress the data
JSON.stringify({
c: code,
p: parserId,
o: optionsString,
}),
)
const url = `https://ast-explorer.dev/#${serialized}`
// no compress
function utoa(data: string): string {
return btoa(unescape(encodeURIComponent(data)))
}
// compress is optional
import { strFromU8, strToU8, unzlibSync, zlibSync } from 'fflate'
function compress(data: string) {
const buffer = strToU8(data)
const zipped = zlibSync(buffer, { level: 9 })
const binary = strFromU8(zipped, true)
return btoa(binary)
}
贡献
若要为本项目做出贡献,请参阅贡献指南。
致谢
本项目参考并受 fkling/astexplorer 启发,这是一款用于探索各种解析器生成的 AST 的开源 Web 工具。
此外,感谢以下项目的贡献: