代码自动补全功能的技术实现难点

2020-08-10 21:23:16 +08:00
 YadongZhang

自己的开源项目里有一需求是使用 KaTeX 实现数学公式输入,其中一个 Task 是 KaTeX 命令自动补全

技术上采用 Trie 数据结构,只是在实现上有点难度:

起初想法是把 KaTeX 所有命令( command )逐个加入 Trie 中,因为它是有限集,不过有 command 嵌套问题,也不是所有 command 都可以嵌套,结构比较复杂,放弃...

第二种思路是参考 overleaf 的做法:数据驱动实现,将最常用的 command 显示在 dropdown list,所有就有了第三种思路:

初始状态下,命令集为空,用户输入之后,如果 command 存在,在插入公式之后便将该 command 加入到 Trie 中,那么问题就是,是否需要一个数据库存储命令集,其实命令集并不需要共用,因为每个用户的专业和领域不同,用到的命令分布范围也有所不同,也就是 local 自动补全功能,如果存到某个变量中,似乎不可取,第二次打开页面变量会初始化,并不会记录上次关闭页面时的值

我一直以为最后一种思路是不可实现的,直到昨天在 emacs 里安装了 auto-complete 写 Agda,发现即使我在一个文件里清空了所有相关代码,再次输入时依然会有 dropdown list 提示,也就是在该文件里会有代码记忆,即使我关闭文件后又重新打开:

这个功能正是我想要的,比较好奇是怎么实现的,虽然我在用 emacs,但是看不懂 emacs-lisp 代码,另外,我的 emacs 里也没有安装 lsp-mode,所以也不会是 lsp 机制影响

发帖和有经验的 v 友交流一下

3066 次点击
所在节点    程序员
4 条回复
zhuangzhuang1988
2020-08-10 21:45:07 +08:00
azh7138m
2020-08-10 22:38:54 +08:00
补全看过一点相关的处理文章

现实的例子,子毅老板的编辑器系列(老板结一下广告费
https://github.com/dt-fe/weekly/blob/v2/085.%E7%B2%BE%E8%AF%BB%E3%80%8A%E6%89%8B%E5%86%99%20SQL%20%E7%BC%96%E8%AF%91%E5%99%A8%20-%20%E6%99%BA%E8%83%BD%E6%8F%90%E7%A4%BA%E3%80%8B.md
可以看他之前的一系列的文章,都是在生产实战检验的东西

轻松愉快的理论例子,装配脑袋的系列
https://www.cnblogs.com/Ninputer/archive/2011/07/03/2096944.html
如何处理未完成 /存在错误的语法
YadongZhang
2020-08-10 23:57:42 +08:00
@zhuangzhuang1988
@azh7138m
感谢两位老哥,我研究一下再回复,感觉有点超出鄙人认知范围了哈哈
xuanbg
2020-08-11 08:20:23 +08:00
有向图

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/697188

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX