autocomplete - 通用代码完成库/工具

标签 autocomplete code-completion

我正在尝试在我最喜欢的编辑器中设置适当的代码完成功能,我们将其称为AnEditor,以避免互联网上充斥着特定于程序的答案。 (您知道语言是ALanguage。)编辑器具有两个我喜欢的功能:它既可以在控制台中工作,也可以在GUI中工作,因此我可以在网络上使用它,并且它具有很大的可扩展性。因此,我不愿意使用功能完善的IDE。但是,如果我找到一个不错的解决方案,可以将其插入,但该编辑器没有可靠的代码完成功能。

我已经针对“[编辑器/IDE Y]中的[语言X]完成”提出了一系列问题和解决方案。似乎每个新的IDE都从头,解析器和所有语言开始为每种语言实现其代码完成。每个较简单的编辑器(包括AnEditor)都执行以下操作之一:

  • 仅完成标准库函数名称
  • 或使用ctags可以提供基于延迟的基于正则表达式的“解析”(适用于非C程序),并且不应告诉您刚才输入的变量的类型,因此对于真正的代码完成来说不是很有用,
  • 如果编辑器可以使用插件扩展,则还有其他方法,但是它们通常归结为上述内容的某种或多或少的变态组合,以及大量的自定义正则表达式。

  • 现在的问题是,为什么我们不能有一个声音代码完成库,我可以将其插入AnEditor而将其他人插入ABigIDE?据我所知(解密C指针丛林不是我的目标),答案应该看起来像这样:
  • 是yacc/lex/bison风格的通用解析器(或静态分析器),在编写过程中以某种方式放松了对代码的容忍度,能够理解JavaDoc风格的注释。而且最好是快速,因此它可以即时使用
  • 一个索引,它可以告诉类的成员,方法的签名及其在文件中的位置(现在是ctags),返回值以及JavaDoc注释中的其他文档
  • 另一个知道变量类型的索引,以及一个根据当前正在写入的文件或代码中的位置告诉类型的函数

  • 因此,要完成某种语言的工作,您需要为该语言制定解析器规则,在标准库和项目上建立索引,召唤打字功能并查找类的成员和文档。或者,如果要处理对象构造或静态调用,则仅列出类和成员。

    如果Eclipse,Netbeans和JetBrains已成功用Java完成此操作(因此我应该使用plug Eclipse to AnEditor),为什么没有人能以一种less肿且更通用的方式来做到这一点?还是我错过了一些东西,而 future 已经潜伏在某个地方?

    最佳答案

    因此:到目前为止,几乎所有人都已经解决了这个确切的问题。 ‘Language servers’ provide a protocol to plug language-specific semantics-aware completion and other features to different editors and IDEs.

    值得注意的是,“语言服务器”倾向于使用与它们解析的语言相同的语言进行开发。对于较慢的语言(例如Python),这可能是一个可疑的决定。

    对于某些语言,类似的解决方案在一段时间内是可用的,而与Langservers无关,例如Haskell等的Tern for JSScionghc-mod等。它们通常主要用于Emacs和Vim。可以预见的是,此类解决方案主要出现在非主流语言中,例如所有的JS编译语言-弹出的速度似乎比为每个编辑器/IDE开发单独的插件要快。

    关于autocomplete - 通用代码完成库/工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326471/

    相关文章:

    jquery - 使用标记数组进行预输入

    android - 自动补全不显示在具有双屏幕的 Android Studio 中

    Delphi 11 Alexandria LSP代码补全问题

    javascript - 任何 IDE 中的 Oo javascript 代码补全

    delphi - 如何修改 Class-Completion (ctrl-shift-c) 生成的代码

    javascript - 允许输入自定义条目的 jQuery 组合框

    jquery Tagsinput 和 ui 自动完成 : can they work with pre-loaded source?

    linux - 谁能告诉我Busybox是如何实现自动补全的

    javascript - Code Assist 不适用于 Eclipse Ver 3 的 Aptana Ver 3 插件

    php - 使用 Eclipse 3.5 PDT,如何阻止它自动转换 <?进入 <?php ?>?