做基于语法自动补全麻烦么?

2022-07-29 12:27:50 +08:00
 zhuangzhuang1988

问题来自于 https://v2ex.com/t/869242#reply17 里面其中有句话 "可是做一个提示很难吗?" 我做前端有时候产品也会提自动补全的需求。

不知道有多少人做过基于语法的补全的, 不是简单的正则或者 string.search

像商业软件 kidna 做了 https://github.com/elastic/kibana/tree/main/packages/kbn-monaco/src/painless

基本小型开源软件中 很少做基于语法自动 一个输入框就结束了

699 次点击
所在节点    程序员
2 条回复
codehz
2022-07-29 13:57:16 +08:00
首先解析不完整的源码,并能忽略部分语法错误这件事就很难了(正常编译器遇到语法错误就直接停下了,你还得强行继续解析直到拿到所有需要的信息)
其次不完整甚至有错误的语法解析了之后还要做语义分析(比方说类型),又是半个编译器前端,分析了之后根据类型提示,又得需要周围上下文信息
如果有多个文件还需要递归扫描依赖文件,于是可能还需要项目配置的信息
除此之外你还得考虑文件很多也很大,不能每次用户按键都全量扫描,得增量
这些做完了,再来考虑上下文提示
最好祈祷语言不要有元编程,不然还得在分析器里跑用户代码,用户写了个死循环,啪,你死了(而且有些死循环只是用户还没写完代码的中间状态才有的)
纯替换的宏的话稍微简单一点,但只有一点点,如何在宏中间补全又是一个史诗级难题
zhuangzhuang1988
2022-07-29 14:39:47 +08:00
@codehz 然而就是有人认为很简单,以为 idea 写 java vs 写 c#提示功能很好,就要别的地方也加自动补全功能

就最简单的命令行 参数自动补全 很少有做得好的,目前只知道 微软的 System.CommandLine https://docs.microsoft.com/zh-cn/dotnet/standard/commandline/tab-completion 这个库微软也做了很久了

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

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

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

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

© 2021 V2EX