我正在尝试在我最喜欢的编辑器中设置适当的代码完成功能,我们将其称为AnEditor,以避免互联网上充斥着特定于程序的答案。 (您知道语言是ALanguage。)编辑器具有两个我喜欢的功能:它既可以在控制台中工作,也可以在GUI中工作,因此我可以在网络上使用它,并且它具有很大的可扩展性。因此,我不愿意使用功能完善的IDE。但是,如果我找到一个不错的解决方案,可以将其插入,但该编辑器没有可靠的代码完成功能。
我已经针对“[编辑器/IDE Y]中的[语言X]完成”提出了一系列问题和解决方案。似乎每个新的IDE都从头,解析器和所有语言开始为每种语言实现其代码完成。每个较简单的编辑器(包括AnEditor)都执行以下操作之一:
现在的问题是,为什么我们不能有一个声音代码完成库,我可以将其插入AnEditor而将其他人插入ABigIDE?据我所知(解密C指针丛林不是我的目标),答案应该看起来像这样:
因此,要完成某种语言的工作,您需要为该语言制定解析器规则,在标准库和项目上建立索引,召唤打字功能并查找类的成员和文档。或者,如果要处理对象构造或静态调用,则仅列出类和成员。
如果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 JS,Scion和ghc-mod等。它们通常主要用于Emacs和Vim。可以预见的是,此类解决方案主要出现在非主流语言中,例如所有的JS编译语言-弹出的速度似乎比为每个编辑器/IDE开发单独的插件要快。
关于autocomplete - 通用代码完成库/工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326471/