Emacs维护者考虑加入incremental parsing功能

全文分析的话, 为了节省内存, tree-sitter数据可以使用类似这样的存储方式: 不保存所有的细节, 只保存outline, 和当前可见区域的详细信息.

outilne一般到函数或方法级别即可. 每个outline项里面记录它的属性和开始结束位置. 空白区域也可以作为特殊的outline项. 这样, outline会覆盖整个buffer, 相当于索引. 依然支持imenu.

当用户跳转到其他位置之后, 根据outline里的信息, 找到当前显示区域对应的outline项(1个或多个), 再实时解析这几个outline项范围内的内容, 保存该详细信息. 并把上一批详细信息丢弃.

这样估计内存占用能减少70%以上.

看到有人提过这个, 他们叫folding, 折叠, 类似于代码折叠, 暂时不关注的代码都折叠起来, 需要的时候再展开.

这个挺好,tree-sitter有实现吗?

好像没有, 不过这个支持起来应该不是很难