Hacker News 中文摘要

RSS订阅

Arborium:支持Native与WASM目标的Tree-sitter代码高亮 -- Arborium: Tree-sitter code highlighting with Native and WASM targets

文章摘要

Arborium是一个提供语法高亮功能的工具,它精选并更新了tree-sitter语法解析器,支持WASM和原生编译。通过自定义HTML标签和ANSI格式输出,简化了标记并支持终端应用。兼容多平台,特别解决了Rust在WebAssembly中的编译难题,提供开箱即用的集成方案。

文章总结

语法高亮工具 arborium 功能详解

核心特性

  • 精选语法解析器:所有语法均基于 tree-sitter 0.26 生成,支持 WASM 和原生编译,并配有完整的高亮查询规则
  • 跨平台支持:原生支持 macOS/Linux/Windows,通过特殊处理实现 WASM 兼容(提供 arborium-sysroot 解决内存分配问题)
  • 输出格式
    • HTML:使用 <a-k> 等语义化标签替代传统 <span>
    • ANSI:支持终端应用的 24 位真彩色输出

快速集成方案

  1. Rust 项目toml arborium = { version = "2", features = ["lang-rust"] } rust let html = arborium::highlight("rust", source)?;

  2. 零配置网页: ```html

    `` 支持自动高亮

    ` 代码块,可通过 data-theme 等属性配置主题

  3. npm 模块javascript import { highlight } from '@arborium/arborium'; const html = await highlight('rust', sourceCode);

特色集成方案

  • Rust 文档:通过 html-in-header 实现多语言代码高亮
  • miette 错误诊断:为 CLI 错误信息添加语法高亮
  • 静态网站生成器 dodeca:内置自动高亮功能

语言支持

  • 包含 96 种语言(如 Rust/C++/Python 等),每个语言独立 feature flag
  • 语法文件大小从 224KB 到 1MB 不等(含 tree-sitter 运行时)
  • 所有语法文件均标注许可证信息

主题系统

  • 预置 30+ 主题(包括 Catppuccin/GitHub/Dracula 等系列)
  • 支持 HTML/ANSI 双平台输出
  • 允许通过 RGB 色值和样式属性自定义主题

技术优势

  • 相比 highlight.js/Shiki:采用真实语法解析而非正则匹配,能识别代码上下文结构
  • WASM 优化:通过多级优化(LTO/单代码单元/strip 等)减小体积
  • 命名由来:拉丁语 "arbor"(树)+"ium"(集合),寓意 tree-sitter 语法库

常见问题

  • 支持用户提交新语法请求
  • 解释 WASM 体积大的原因:包含完整的 LR 解析状态表
  • 说明不直接使用 tree-sitter CLI 构建的原因:保持前后端代码一致性

(注:原文中重复的语言列表、详细语法体积表格、代码示例截图等非核心内容已精简,保留主要功能点和关键技术说明)

评论总结

总结评论内容:

  1. 正面评价:
  • 用户认为项目很酷,满足需求:"This is cool, was looking for something similar" (virajk_31)
  • 赞赏作者的赞助成就:"The sponsorships achieved by the author is admirable" (jasonjmcghee)
  1. 使用疑问:
  • 对项目定位不明确:"I can't understand what this actually is...Text editors, website creators?" (teo_zero)
  • 对编辑功能存疑:"does it support editing highlighted text?" (mg)
  1. 技术讨论:
  • 推荐Tree-sitter解析工具:"Tree-sitter is a parser generator tool..." (Tepix)
  • 分享Tree-sitter应用体验:"just use gemini to write a grammar...the total progress is quite smooth" (mintflow)
  1. 改进建议:
  • 指出入门文档问题:"The get started section seems to be broken" (unrealhoang)
  • 建议更好的参考链接:"is a better link (the author's article about this)" (joshka)
  1. 功能探讨:
  • 讨论语法高亮实现:"It's really powerful because it actually parses the text into an AST" (aarol)
  • 分享编辑器集成经验:"My favorite is nvim-treesitter-textobjects" (pseudo_meta)