Paradoxical 札记

最近把 neorg 作为笔记和规划系统有点上头,但苦于没一个好用的 Language Server,自己又对编译器前端方面略有了解于是决定写下这篇大概会持续更新的札记

我们的最终目的是实现一个不错的 Language Server 并且可以在 neovim/helix 上跑起来

为什么是 neovim/helix 呢?因为我暂时不会继续用 VSCode 了

流水线设计

考虑到我希望 paradoxical 有如下两个功能

  • 重新格式化 neorg 文档
  • 良好的补全

因此我决定采用如下流水线设计:

1
2
Text  →  Lexer (RawTokenKind)  →  CST  →  Typed AST/HIR  →  Semantic Analysis  →  LSP Server  →  Editor
| src | Lazy Lexer | CST | AST |

需要着重说明的是,我们使用 rope 来保存源文件,这样我们所有的操作的时间复杂度都是 \(O(logN)\)

目标

阶段 0

在阶段 0 需要实现最基本的功能:解析

但由于 neorg 的格式内容较多所以在这个阶段只考虑实现一个子集

  • 标题
  • 有序/无序列表
  • 文本段
    • 逐字类型 VerbatimParagrah
    • 文本类型 Paragraph

Paradoxical 札记
https://blog.krysztal.dev/2025/05/12/Paradoxical-札记/
作者
Krysztal
发布于
2025年5月12日
许可协议