是否可以在 IDE 和语言服务器之间建立代理?

Is it possible to make a proxy between IDE and language server?

说,我想稍微改变一些语言的行为。

这能做到吗?以前做过吗?

UPD:Typescript 使用 属性 名称的可能性非常有限(例如,您不能在 TypeScript 的帮助下创建从另一个派生的 propname,例如大写或前缀) ,而 Javascript (这是 Typescript 编译的结果)非常灵活。所以我想在LSP的帮助下修改一些带有自动完成选项的Typescript的LSP消息。

是的,但具体操作取决于操作系统。从编译器的角度来看,代理将显示为您的 IDE。 LSP 是一个 网络协议

I want to slightly change the behavior of some language.

所以您想更改某些语言的 semantics(但您不知道是哪种语言)。那么 LSP 不是这样做的最佳场所。

比如一些简单的情况,用GCC, writing your GCC plugin比较合适。

在大多数情况下,更改 "behavior" 实际上是在更改语言本身。然后您可能需要自己实现该语言。有时,您可能会修补原始语言的现有自由软件实现。在其他情况下,您需要自己进行语言实现。然后在你的语言实现中阅读Dragon Book and consider compiling or transpiling to C你的语言。务必先在纸上注明。

不要混淆编程语言(它是一种 规范,通常是用英语编写的 - 可能有一些特定符号的形式化,例如 n1570 for C11, R5RS for Scheme) with its implementation (which is a software). Read Scott's Programming Language Pragmatics

不要将 IDE 与语言实现混淆。例如,我所知道的所有 C 或 C++ 编译器都没有任何 IDE 并且是命令行程序(例如 GCC, Clang, etc...), and most of them don't even know about LSP. The IDE might start the C++ compiler, but it is not a compiler. You can code (in C, C++, Java, C#, Ocaml, ....) with a plain source code editor(甚至是一个简单的与语言无关的编译器,例如 Windows 上的记事本,或 Linux 上的 Leafpad 或 nano。

大多数编程语言将源程序定义为一组 "translation units",实际上是 "source files",每个都是具有一些复杂语法和语义的字符序列。如何创建这些源文件超出了编程语言规范的范围(您可以使用编辑器,您可以为这些源文件编写自己的生成器,....)

LSP 是 "IDE" 和语言实现之间的协议提案。

请注意,自动完成(在您的评论中提到)不是编程语言的一项功能(也不是 C 或 C++ 语义的一部分)。它可能是某些 IDE 的特征(不是全部)。它可以以语言中立的方式完成(例如 Emacs)。