问题来自于 https://v2ex.com/t/869242#reply17 里面其中有句话 "可是做一个提示很难吗?" 我做前端有时候产品也会提自动补全的需求。
不知道有多少人做过基于语法的补全的, 不是简单的正则或者 string.search
像商业软件 kidna 做了 https://github.com/elastic/kibana/tree/main/packages/kbn-monaco/src/painless
基本小型开源软件中 很少做基于语法自动 一个输入框就结束了
1
codehz 2022-07-29 13:57:16 +08:00 via iPhone
首先解析不完整的源码,并能忽略部分语法错误这件事就很难了(正常编译器遇到语法错误就直接停下了,你还得强行继续解析直到拿到所有需要的信息)
其次不完整甚至有错误的语法解析了之后还要做语义分析(比方说类型),又是半个编译器前端,分析了之后根据类型提示,又得需要周围上下文信息 如果有多个文件还需要递归扫描依赖文件,于是可能还需要项目配置的信息 除此之外你还得考虑文件很多也很大,不能每次用户按键都全量扫描,得增量 这些做完了,再来考虑上下文提示 最好祈祷语言不要有元编程,不然还得在分析器里跑用户代码,用户写了个死循环,啪,你死了(而且有些死循环只是用户还没写完代码的中间状态才有的) 纯替换的宏的话稍微简单一点,但只有一点点,如何在宏中间补全又是一个史诗级难题 |
2
zhuangzhuang1988 OP @codehz 然而就是有人认为很简单,以为 idea 写 java vs 写 c#提示功能很好,就要别的地方也加自动补全功能
就最简单的命令行 参数自动补全 很少有做得好的,目前只知道 微软的 System.CommandLine https://docs.microsoft.com/zh-cn/dotnet/standard/commandline/tab-completion 这个库微软也做了很久了 |