我正在尝试在我最喜欢的编辑器中设置正确的代码完成,让我们称之为AnEditor,以避免互联网充满的程序特定的答案。 (而且语言是ALanguage,你知道。)编辑器有两个我喜欢的功能:它在控制台和GUI中一样好,所以我可以通过网络使用它,并且它具有很大的可扩展性。所以我不愿意使用一个完整的IDE。但是编辑器没有可靠的代码完成,但如果我找到一个合适的解决方案,它可以插入。
我在 [editor / IDE Y] 中搜索了一大堆关于“ [语言X] 完成的问题和解决方案”。似乎每个新IDE都从头开始为每种语言实现代码完成,解析器和所有语言。每个更简单的编辑器(包括AnEditor)都会执行以下操作之一:
现在,问题是,为什么我们不能有一个声音代码完成库,我可以插入AnEditor和其他人到ABigIDE?据我所知(解读C指针丛林不是我的目标),答案应该看起来像这样:
因此,要完成某些语言的工作,您需要为语言编写解析器规则,在标准库和项目上构建索引,召唤类型识别函数并查找类的成员和文档。或者只是列出类和成员,如果你正在处理对象构造或静态调用。
如果Eclipse,Netbeans和JetBrains已经用Java成功完成了它(因此我应该plug Eclipse to AnEditor),为什么没有人能够以不那么臃肿和更普遍的方式做到这一点?或者我错过了什么,未来已经潜伏在某个地方?
答案 0 :(得分:0)
因此:到目前为止,微软已经解决了所有人中的这个确切问题。 ‘Language servers’ provide a protocol to plug language-specific semantics-aware completion and other features to different editors and IDEs.
值得注意的是,“语言服务器”倾向于以它们解析的相同语言开发。对于较慢的语言(例如Python),这可能是一个可疑的决定。
对于某些语言,类似的解决方案可在一段时间内使用,而与Langservers无关,例如Tern for JS,Scion和ghc-mod用于Haskell等。它们通常主要用于Emacs和Vim。可以预见,这种解决方案主要出现在非主流语言中,例如所有的JS编译语言,而且弹出的速度似乎比为每个编辑器/ IDE开发单独的插件要快。