【问题标题】:How to autocomplete when source code becomes invalid after user input?用户输入后源代码无效时如何自动完成?
【发布时间】:2020-04-17 01:16:09
【问题描述】:

我正在开发一个 VSCode 扩展,为自定义语言提供自动完成功能。它打算根据用户输入的内容自动建议,使用来自编译器的信息,例如,以前定义的变量。但是,在用户输入后,源代码经常会变得无效并包含语法错误。编译器无法解析它,因此无法提供在用户输入之前可用的已定义变量。如何处理这种增量变化?这种自动完成是否需要编译器在某种程度上容忍错误?有一些讨论here,但过于宽泛且没有定论。

【问题讨论】:

    标签: visual-studio-code autocomplete vscode-extensions


    【解决方案1】:

    解析器不是用于代码完成的正确工具,因为它需要语法正确的输入,而在需要代码完成时几乎永远不可用。您当然可以缓存来自先前解析运行的信息并仅在代码不时达到有效状态时更新它,但这不会很好地工作。当用户刚开始编写代码时,你会展示什么(因为之前没有好的运行)?

    相反,我在我的 ANTLR4 代码完成核心 (antlr4-c3) 中使用了不同的方法:我使用提供的 ATN (Augmented Transition Network) 来查找当前插入符号的位置,然后展望可能出现的标记。这已经为您提供了所有可能的词法(数字、ID、关键字等)。如果您想提供更多详细信息(例如类名、变量等),则需要进行更多处理。

    通过使用手动遍历 ATN,您至少可以处理部分正确的代码。一个重要的要求是,从开头到插入符号位置的代码必须正确,但之后的所有内容都可能不完美。

    我将这个代码完成核心用于我的 vscode 扩展 vscode-antlr4,它工作得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多