V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhuangzhuang1988
V2EX  ›  程序员

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

  •  
  •   zhuangzhuang1988 · 2022-07-29 12:27:50 +08:00 · 635 次点击
    这是一个创建于 647 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    就最简单的命令行 参数自动补全 很少有做得好的,目前只知道 微软的 System.CommandLine https://docs.microsoft.com/zh-cn/dotnet/standard/commandline/tab-completion 这个库微软也做了很久了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2626 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:47 · PVG 23:47 · LAX 08:47 · JFK 11:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.